我在页面中有以下元素:
<div class="cl1 cl2"></div>
<div class="cl1 cl2"></div>
<div class="cl1 cl2"></div>
当我运行此代码时:
<script>
var elems = document.getElementsByClassName("cl1");
for (var i = 0; i < elems.length; i++) {
console.log(i + ": " + elems[i].className);
}
</script>
我可以看到:
0 cl1 cl2
1 cl1 cl2
2 cl1 cl2
在控制台中。
但是这段代码:
<script>
var elems = document.getElementsByClassName("cl1");
for (var i = 0; i < elems.length; i++) {
console.log(i + ": " + elems[i].className);
elems[i].className = 'cl3'; // or = '' (removing all classes)
}
</script>
给出:
0 cl1 cl2
1 cl1 cl2
在第一次运行时,并且:
0 cl1 cl2
在第二次运行。
不修改所有元素的原因是什么?我可以看到elems.length
当我们触摸时它正在减少elems[i].className
,但原因是什么?
如果我们放置var n = elems.length
并更改 for 循环,i < n
我们将得到Cannot read property 'className' of undefined
错误。
问题是如何从第一次修改所有类?
因为我相信下面的代码看起来很傻:
var elems = document.getElementsByClassName("cl1");
while (elems.length) {
for (var i = 0; i < elems.length; i++) {
console.log(i + ": " + elems[i].className);
elems[i].className = 'cl3';
}
elems = document.getElementsByClassName("cl1");
}