我有一些代码:
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class", "gDay gDayHover");
这适用于所有现代浏览器,但不适用于IE6。 IE6需要:
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover");
我将有另一个变量:
var addOnClassAtt;
可以设置为“”或“Name”,这样我就可以运行单行:
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover");
我如何确定用户是否正在运行需要className而不是class的浏览器?我宁愿避开浏览器检测并有一个初始的try catch类型方法来设置它,但如果这不可能,那么最好的方法是什么?
答案 0 :(得分:3)
在大多数情况下,您最好不要进行功能检测而不是浏览器检测。 Javascript中的特征检测比浏览器检测更容易,更可靠。
在这个特定的例子中,你最好像这样设置类:
document.getElementById(...).className = "gDay gDayHover";
此代码适用于所有浏览器,包括IE6。
你遇到这个问题的原因是,在DOM中,class属性被称为className
。
这是因为单词class
是JavaScript中的保留字,因此在DOM中使用它可能会在某些情况下导致歧义,但正如您所见,该问题的解决方案最终会导致其他问题!< / p>
从中可以得出的教训是,setAttribute
不是用于设置class
属性的可靠函数。大多数其他属性应该与setAttribute
一样好,尽管其他一些属性也可能有问题,因此通常最好使用DOM属性。
答案 1 :(得分:2)
不要使用setAttribute
来设置类名,IE会吓坏;而是设置DOM对象的属性 className
:
document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";