2011-01-13 50 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

相关问题