首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为IE6/其他浏览器运行不同的JS

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

Stack Overflow用户
提问于 2011-01-13 20:14:37
回答 2查看 221关注 0票数 1

我有一些代码:

代码语言:javascript
运行
复制
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class", "gDay gDayHover");

这可以在所有现代浏览器中工作,但不能在IE6中工作。IE6需要:

代码语言:javascript
运行
复制
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover");

我将有另一个变量:

代码语言:javascript
运行
复制
var addOnClassAtt;

将其设置为"“或"Name”,这样我就可以运行这一行:

代码语言:javascript
运行
复制
document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover");

如何确定用户是否正在运行需要className而不是类的浏览器?我宁愿避开浏览器检测,而是使用一个初始的try catch类型方法来设置它,但是如果这不可能,那么最好的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-13 20:23:03

在大多数情况下,您最好进行功能检测,而不是浏览器检测。在Javascript中,功能检测比浏览器检测更容易,也更可靠。

在本例中,最好像这样设置类:

代码语言:javascript
运行
复制
document.getElementById(...).className = "gDay gDayHover";

这段代码应该可以在所有浏览器中运行,包括IE6。

出现这个问题的原因是这个类属性在DOM中被称为className

这是因为单词class是JavaScript中的保留字,所以在某些情况下在DOM中使用它可能会导致歧义,但正如您所看到的,该问题的解决方案最终会导致其他问题!

从中得到的教训是,对于设置class属性,setAttribute不是一个可靠的函数。大多数其他属性都可以使用setAttribute,但也有一些其他属性可能会有问题,所以通常最好使用DOM属性。

票数 3
EN

Stack Overflow用户

发布于 2011-01-13 20:21:59

不要使用setAttribute来设置类名,IE会抓狂的;而应该设置DOM对象的属性className

代码语言:javascript
运行
复制
document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4679872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档