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のサンプルコード
CSS では、テキストは私たちが毎日扱う最も一般的なものの 1 つです。テキストの場合、テキストの装...
JavaScriptで格納可能なセカンダリメニューを実装するための具体的なコードは参考までに。具体...
vue3テレポート瞬間移動機能の使用は参考用です。具体的な内容は次のとおりです。テレポートは通常、瞬...
この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...
この記事では、jQueryのクリック時のラブエフェクトの具体的なコードを参考までに共有します。具体的...
CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...
JS には、文字列をインターセプトするための 3 つのメソッド、 slice() 、 substri...
序文MySQL では、複数テーブル結合クエリは非常に一般的な要件です。複数テーブルクエリを使用する場...
まず、 (1)MySQL 5.7にはデフォルトのパスワードがあるデフォルトのパスワードを見つける g...
1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...
1 はじめにデータベース内のデータを操作するための SQL 文を記述するときに、いくつかの不快な問題...
<p></p> の行間隔を設定するには、style="line-h...
面接の質問で、3 行 3 列のレイアウトが求められます。1 行目の 2 番目の列と 2 行目の 2 ...
1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...
<br />記事と同様に、Web ページにも明確な段落と重要度の異なるタイトルが必要です...