戻り値の範囲外に出たくない場合でも驚かないでしょうgetElementsByClassName
(ただし、何が起こるかをテスト/確認していません)。最初に結果を保存してから、それらをループしてみてください。
var p12s = document.getElementsByClassName('p12');
for (var i = 0; i < p12s.length; i++) {
p12s[i].style.display = "none";
}
var p34s = document.getElementsByClassName('p34');
for (var i = 0; i < p34s.length; i++) {
p34s[i].style.display = "none";
}
100
このようにして、それぞれが返す正確な量の要素 (ハードコードを持っていない) をループしgetElementsByClassName
ます。
主な問題は、ハードコーディング100
すると常に 0 から 99 までループすることです。getElementsByClassName
返される要素が 100 未満の場合、そのインデックスにアクセスしようとすると undefined が返され、次のようなことをしようとすると例外がスローされます.style.display = "none";
。または、160 個の要素が返された場合はどうなるでしょうか。最初の 100 のみが変更されます。ループの前に呼び出しを行い、返された要素を変数に格納してから、その長さをループするのが安全で正しい方法です。以前の方法では、getElementsByClassName
ループの反復ごとに を呼び出していました。非常に非効率的です。1 回だけで済みます!...そしてもちろん、ハードコーディングも必要です。100
要素をループする最良の方法ではありませんでした。それはすべて正しいアイデアでしたが、正しい順序ではありませんでした。つまり、技術的には、次のようなことができたはずです。
for (i=0; i<100; i++) {
var el = document.getElementsByClassName('p12')[i];
if (el) {
el.style.display = 'none';
}
}
しかし、私が言ったようにgetElementsByClassName
、すべてのループ反復で呼び出すのはあまり効率的ではありません。