「className」の変更が HTMLCollection 内の他のすべての要素にのみ影響するのはなぜですか?

Susan Sarandon
リリース: 2024-11-28 03:09:10
オリジナル
678 人が閲覧しました

Why Does Changing `className` Only Affect Every Other Element in an HTMLCollection?

className が他のクラスごとにのみ変更される

このコード スニペットでは、className プロパティが他のすべての要素でのみ変更されるという問題が発生します。コレクションの中で。目標は、この動作の背後にある理由を理解し、解決策を見つけることです。

提供されたコードは、getElementsByClassName() メソッドを利用して、クラス「block-default」の HTML 要素を取得します。次に、コレクション内の各要素の className プロパティを「block-selected」に変更します。ただし、その結果、代替要素のみが更新され、他の要素は元の「block-default」クラスのままになります。

原因は HTMLCollection の性質にあります。これらのコレクションはライブであり、DOM の現在の状態を反映しています。要素の className プロパティが変更されると、コレクション自体も影響を受けます。具体的には、変更された要素がリストから削除されるため、コレクションのサイズが減少します。

この問題を修正するには、コレクションの要素に対するその後の変更が残りの要素のインデックスに影響することを覚えておくことが重要です。解決策は、最初の要素の className のみを一貫して変更することです。

1 つの方法では、コレクションを反復処理して最初の要素を繰り返し変更します。

for (var i = 0; i < blockSetLength; i++) {
  blockSet[0].className = "block-selected";
}
ログイン後にコピー

このアプローチでは、最初の要素が一貫して変更されることが保証されます。

または、スプレッド演算子を使用して HTMLCollection を配列に変換し、要素を変更する際の柔軟性が高まります。

var blockArray = [...blockSet];

for (var i = 0; i < blockArray.length; i++) {
  blockArray[0].className = "block-selected";
}
ログイン後にコピー

いずれの場合も、最初の要素の className のみを変更することで、コレクション内のすべての要素のクラスを変更するという望ましい結果を達成できます。

以上が「className」の変更が HTMLCollection 内の他のすべての要素にのみ影響するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート