2013-04-29 130 views
0

我設置命名(比如說)titleDiv自定義屬性使用的setAttribute方法IE 9 getAttribute方法工作

HTML代碼: <div id="Object" titleDiv="blank"></div>

Javascript代碼:

var Object=document.getElementById('Object'); Object.setAttribute("titleDiv","myDiv");

其中一期工程在IE 9以外的所有瀏覽器中都可以使用。 getAttribute也會發生同樣的情況。

我有我的代碼中廣泛使用自定義屬性,如上所述,我不應該改變結構。

有沒有其他的方法來編寫上面的代碼,以便IE能理解它?

謝謝。基於問題編輯

+0

是什麼讓你覺得IE9沒有這樣做?適用於我,只要您使用實際的DOM元素,而不是字面意義上的「Object」:http://jsbin.com/ujadaj/1([source](http://jsbin.com/ujadaj/1))。 – 2013-04-29 09:30:26

+0

這個? http://stackoverflow.com/questions/3919291/when-to-use-set-attribute-vs-attribute-in-javascript – 2013-04-29 09:33:10

+0

@BillyMoat:這是*具體*的'類'屬性,IE8和更早的版本有真正的問題,但幸運的是它通過名爲'className'的屬性反映出來。 – 2013-04-29 09:36:35

回答

3

更新答

您使用的是真的應該遠離的標識符:Object。我建議更改id您使用的變量的名稱。所以:

<div id="theObject" titleDiv="blank"></div> 

var theObject=document.getElementById('theObject'); 
theObject.setAttribute("titleDiv","myDiv"); 

Object是JavaScript的內置功能。由於元素的id被轉儲到全局名稱空間中,因此我將避免使用任何內置JavaScript函數(Object,Function,Date等)作爲id值。出於類似的原因,特別是如果你不會讓自己和其他人混淆,我會遠離它們作爲變量名稱。

這就是說,我couldn't replicate the problemsource),所以雖然我仍然會改變id和變量名稱,這可能不是問題。另見下文。


原來的答案

您對DOM元素實例調用setAttribute。你不通過內置的Object函數來完成。

如果使用DOM元素,它的工作原理(即使在IE9):

(function() { 
    // Get an actual DOM element 
    var target = document.getElementById("target"); 

    // Set the attribute 
    target.setAttribute("titleDiv","myDiv"); 

    // Show the result 
    display("Result: " + target.getAttribute("titleDiv")); 

    function display(msg) { 
    var p = document.createElement('p'); 
    p.innerHTML = String(msg); 
    document.body.appendChild(p); 
    } 
})(); 

Live Example | source

如果您使用F12開發人員工具並轉到HTML選項卡,則可以看到div實際上確實獲取了該屬性。 (請務必使用開發工具,而不是「查看源代碼」 - 「查看源代碼」將向您顯示從服務器發送的HTML,而不是DOM的當前狀態。)


邊注:使用不使用the data- prefix是一個壞主意非標準屬性。您可能想要將這些信息提供給支配這一信息的人。但這幾乎不是你遇到的問題。

+0

其實我的問題是我正在寫一個簡單的拖放應用程序,並在拖動結束時,我調用一個簡單的字符串拖動項目的id函數。當我在IE上提醒該ID時,它會顯示我的函數itemId(){[native code]}。這是什麼? – user1079065 2013-04-29 09:44:19

+0

@ user1079065:我沒有關注你。這與問題/答案有什麼關係? – 2013-04-29 09:45:24

+0

我認爲IE沒有得到getAttribute,但問題是不同的。它理解getAttribute它沒有得到我傳遞給我的拖動結束函數的字符串 – user1079065 2013-04-29 09:46:57