1. 概要コードを見ると、 1.1 querySelector() と querySelectorAll() の使用querySelector() メソッド 定義: 注: 構文: パラメータ値:文字列必須。一致する要素に対して 1 つ以上の CSS セレクターを指定します。 ID、クラス、タイプ、属性、属性値などを使用して要素を選択します。 querySelectorAll() メソッド 定義: ヒント: NodeList オブジェクトの長さプロパティを使用してセレクターに一致する要素属性を取得し、すべての要素を反復処理して必要な情報を取得できます。 構文: パラメータ値:
1.2 getElement(s)Byxxxx の使用getElementById() メソッド 定義: 構文: パラメータ値: getElementsByTagName() メソッド 定義: getElementsByClassName() メソッド 定義: 2. 違い2.1 getElement(s)Byxxxx は動的コレクションを取得し、querySelector は静的コレクションを取得します。動的とは、選択した要素がドキュメントとともに変更されることを意味し、静的とは、要素が取り出された後にドキュメントの変更とは関係がないことを意味します。 例1: <本文> <ul id="box"> <li class="a">テスト 1</li> <li class="a">テスト 2</li> <li class="a">テスト 3</li> </ul> </本文> <script type="text/javascript"> // ul を取得し、後で li を動的に追加します var ul = document.getElementById('box'); //既存の ul 内の li を取得します var リスト = ul.getElementsByTagName('li'); for(var i =0; i < list.length; i++){ ul.appendChild(document.createElement('li')); // liを動的に追加 } </スクリプト> 上記のコードは、i < list.length というループ条件で無限ループに陥ります。 例1の変更: for ループ条件を i < 4 に変更します。その結果、ul に 4 つの新しい要素が追加され、挿入される li タグの数は 7 になります。 <本文> <ul id="box"> <li class="a">テスト 1</li> <li class="a">テスト 2</li> <li class="a">テスト 3</li> </ul> </本文> <script type="text/javascript"> var ul = document.getElementById('box'); var リスト = ul.getElementsByTagName('li'); (var i = 0; i < 4; i++){ ul.appendChild(document.createElement('li')); } console.log('リストの長さ:',リストの長さ); </スクリプト>
例2: 次のコードの静的コレクションは、ul 内のすべての li を取得するために <本文> <ul id="box"> <li class="a">テスト 1</li> <li class="a">テスト 2</li> <li class="a">テスト 3</li> </ul> </本文> <script type="text/javascript"> var ul = document.querySelector('ul'); var リスト = ul.querySelectorAll('li'); for(var i = 0; i < list.length; i++){ ul.appendChild(document.createElement('li')); } console.log('list.length:',list.length); //出力結果は3のままで、この時点でのliの数は6ではありません </スクリプト>
なぜこのように設計されているのでしょうか? querySelectorAll メソッドは、W3C 仕様で明確に定義されています。 Chrome で何が起こるか見てみましょう: document.querySelectorAll('a').toString(); // "[object NodeList]" を返す document.getElementsByTagName('a').toString(); // "[object HTMLCollection]" を返します HTMLCollection は W3C で次のように定義されています。
実際、 これは少し理解しにくいですが、次の例を見ると理解しやすくなります。 var ul = document.getElementsByTagName('ul')[0], lis1 = ul.childNodes、 lis2 = ul.children; console.log(lis1.toString(), lis1.length); // "[オブジェクト NodeList]" 11 console.log(lis2.toString(), lis2.length); // "[オブジェクト HTMLCollection]" 4
2.2 受信したパラメータが異なる
var c1 = document.querySelectorAll('.b1 .c'); var c2 = document.getElementsByClassName('c'); var c3 = document.getElementsByClassName('b2')[0].getElementsByClassName('c'); 注意: 試す { var e1 = document.getElementsByClassName('1a2b3c'); var e2 = document.querySelectorAll('.1a2b3c'); } キャッチ (e) { コンソールエラー(e.message); } コンソールにログ出力します。(e1 && e1[0].className); コンソールにログ出力します。(e2 && e2[0].className); 2.3 異なるブラウザの互換性
JavaScript の querySelector メソッドと getElementById メソッドの違いに関するこの記事はこれで終わりです。JavaScript の querySelector メソッドと getElementById メソッドに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 3次元画像配置効果を実現する純粋なCSSのサンプルコード
スクロール バーを下に引くと、主にposition:fixed;スタイルにより、フローティング ボッ...
みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
VueはRefを使用してレベル間でコンポーネントインスタンスを取得します例の紹介開発プロセスでは、レ...
目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...
目次序文問題: 大きなファイルのコピーNodeJS のストリームとバッファバッファストリーム解決策 ...
1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...
半夜かけてようやくブログのスタイルを大体完成させることができました。ブログ全体が青を基調としていて、...
Pantherは新人としてスタートし、今もまだ新人ですが、人々から学び、学んだことを時々皆さんと共有...
Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...
序文:サンドボックスといえば、私たちの頭には反射的に上の写真が思い浮かび、すぐに興味がわいてくるかも...
目次1. 脱構築とは何か? 2. 配列の分割3. 配列モードと代入モードの統一4. デフォルト値の構...
目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...
開発中に画像とテキストが 1 行に表示されることはよくあります。2 つのインライン要素を揃えるのは通...
<br /> テキスト、シンボル、リンクの 3 つの側面に焦点を当て、主に中国語で、私の...