我正在编写一些JS代码来切换某些DOM元素的类。 一切正常,但我也得到了这个错误 防止执行后面的代码。
我添加了一个检查,以确保元素数组不是空的,正如我想的那样
这是问题所在。但仍然会发生错误。在调用old_name
时,调试始终显示replace
的值。我错过了JS-esque的东西吗?
这是导致错误的代码部分,特别是第31行:
if (w > MOBILE_THRESHOLD) {
responsive_elements = document.getElementsByClassName("desktop");
if (responsive_elements.length > 0) {
for (i in responsive_elements) {
var old_name = responsive_elements[i].className;
var new_name = old_name.replace("desktop", "mobile");
responsive_elements[i].className = new_name;
}
}
必要时,我很乐意提供更多代码或任何需要的信息。谢谢!
答案 0 :(得分:5)
Never use for...in
loops to iterate array-like objects!!!!!
在这种情况下,HTMLCollection
具有可枚举的属性,例如item
或namedItem
。访问这些内容不会返回HTML元素,因此className
将是未定义的。
要正确迭代,您可以使用其中一个
for(var i=0; i<responsive_elements.length; ++i) {
// ...
}
[].forEach.call(responsive_elements, function(element, index, collection) {
// ...
});