我有一些代码:
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而不是类的浏览器?我宁愿避开浏览器检测,而是使用一个初始的try catch类型方法来设置它,但是如果这不可能,那么最好的方法是什么?
发布于 2011-01-13 20:23:03
在大多数情况下,您最好进行功能检测,而不是浏览器检测。在Javascript中,功能检测比浏览器检测更容易,也更可靠。
在本例中,最好像这样设置类:
document.getElementById(...).className = "gDay gDayHover";这段代码应该可以在所有浏览器中运行,包括IE6。
出现这个问题的原因是这个类属性在DOM中被称为className。
这是因为单词class是JavaScript中的保留字,所以在某些情况下在DOM中使用它可能会导致歧义,但正如您所看到的,该问题的解决方案最终会导致其他问题!
从中得到的教训是,对于设置class属性,setAttribute不是一个可靠的函数。大多数其他属性都可以使用setAttribute,但也有一些其他属性可能会有问题,所以通常最好使用DOM属性。
发布于 2011-01-13 20:21:59
不要使用setAttribute来设置类名,IE会抓狂的;而应该设置DOM对象的属性className:
document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";https://stackoverflow.com/questions/4679872
复制相似问题