为IE6 /其他浏览器运行不同的JS

时间:2011-01-13 12:14:37

标签: javascript internet-explorer compatibility

我有一些代码:

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类型方法来设置它,但如果这不可能,那么最好的方法是什么?

2 个答案:

答案 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";