2011-01-13 47 views
1

我有一些代碼:運行不同的JS的IE6 /其他瀏覽器

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class", "gDay gDayHover"); 

這適用於所有現代瀏覽器,但不是IE6。 IE6需要:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover"); 

我將有另一個變量:

var addOnClassAtt; 

其或者設置爲 「」 或 「姓名」 這樣我就可以運行單行:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover"); 

如何確定用戶是否正在運行需要className而不是class的瀏覽器?我寧願避開瀏覽器檢測,並有一個初始嘗試catch類型的方法來設置它,但如果這是不可能的,最好的方法是什麼?

回答

3

在大多數情況下,你最好做特徵檢測,而不是瀏覽器檢測。功能檢測在Javascript中比瀏覽器檢測更容易和更可靠。

在這種特定情況下,你會更好設置類是這樣的:

document.getElementById(...).className = "gDay gDayHover"; 

此代碼應在所有瀏覽器,包括IE6工作。

您之所以遇到這個問題的原因是DOM中的類屬性被稱爲className

這是因爲單詞class是JavaScript中的保留字,所以在DOM中使用它可能會在某些情況下導致模糊,但正如您所見,解決該問題最終會導致其他問題!

從中得到的教訓是setAttribute不是用於設置class屬性的可靠函數。 setAttribute大多數其他屬性應該沒問題,但其他一些屬性也可能有問題,因此通常最好使用DOM屬性。

2

不要用setAttribute來設置一個類名,IE會嚇壞了;而不是設置DOM對象的財產className

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover"; 
+0

完美的解決方案謝謝!似乎也適用於所有瀏覽器。 – 2011-01-13 12:23:26

+0

你確定IE6支持className中的多個類嗎? – kennebec 2011-01-13 13:22:35

相關問題