ページには次の要素があります。
<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
2回目の実行で。
すべての要素を変更しない理由は何ですか? elems.length
に触れると減少しているのがわかりますelems[i].className
が、その理由は何ですか?
var n = elems.length
for-loopを入れて変更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");
}