Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为IE6/其他浏览器运行不同的JS_Javascript_Internet Explorer_Compatibility - Fatal编程技术网

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

Javascript 为IE6/其他浏览器运行不同的JS,javascript,internet-explorer,compatibility,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 addO

我有一些代码:

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?我宁愿避开浏览器检测,并使用一个初始的try-catch-type方法来设置它,但如果这不可能,那么最好的方法是什么?

不要使用
setAttribute
来设置类名,IE会崩溃;而是设置DOM对象的属性
className

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";

不要使用
setAttribute
设置类名,否则会崩溃;而是设置DOM对象的属性
className

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";

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

在这个特定的实例中,最好将类设置为:

document.getElementById(...).className = "gDay gDayHover";
此代码应适用于所有浏览器,包括IE6

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

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


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

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

在这个特定的实例中,最好将类设置为:

document.getElementById(...).className = "gDay gDayHover";
此代码应适用于所有浏览器,包括IE6

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

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


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

完美解决方案谢谢!似乎在所有浏览器中都能工作。你确定IE6支持类名中的多个类吗?@kennebec:是的,为什么不应该?刚刚测试了这个,它的工作如预期。完美的解决方案谢谢!似乎在所有浏览器中都能工作。你确定IE6支持类名中的多个类吗?@kennebec:是的,为什么不应该?刚刚测试了这个,它就如预期的那样工作了。不完全正确:
for
也有问题,原因相同。通常,总是使用DOM元素的属性,而不是
setAttribute
@Marcel Korpel-谢谢。我编辑了我的答案的最后一部分,以澄清我的意思并包括你的观点。不完全正确:
for
也是有问题的,出于同样的原因。通常,总是使用DOM元素的属性,而不是
setAttribute
@Marcel Korpel-谢谢。我编辑了我答案的最后一部分,以澄清我的意思,并包括你的观点。