はじめに
この記事では、JavaScriptの要素セレクタにおけるLive NodeListとStatic NodeListの違いを解説する。
要素セレクタとは
要素セレクタは、HTML ドキュメント内の要素を選択するために使用される関数である。JavaScript には、さまざまな要素セレクタが用意されており、それらを使って HTML 要素にアクセスして操作できる。
この記事では、JavaScriptの要素セレクタにおけるLive NodeListとStatic NodeListの違いを解説する。
要素セレクタは、HTML ドキュメント内の要素を選択するために使用される関数である。JavaScript には、さまざまな要素セレクタが用意されており、それらを使って HTML 要素にアクセスして操作できる。
Live NodeListは、取得した要素リストが動的に更新される。元のHTMLに変更が加わると、リストの内容も自動的に変わる。つまり、元の HTML ドキュメントが変更されると、Live NodeList も自動的に更新される。
Live NodeListを生成するメソッド
const liveNodeList = document.getElementsByClassName('example');
このgetElementsByClassNameは、指定したクラスを持つ要素をリアルタイムに取得する。
同様に、以下のメソッドもLive NodeListを返す。
getElementsByTagNamegetElementsByNamechildNodesStatic NodeListは、取得した時点の要素リストが固定される。HTMLの変更があっても、リストの内容は更新されない。そのため、元の HTML ドキュメントが変更されても、Static NodeList の内容は変わらない。固定された要素リストを扱う場合に便利である。
Static NodeListを生成するメソッド
const staticNodeList = document.querySelectorAll('.example');
このquerySelectorAllは、指定したセレクタに一致する要素を取得し、リストの内容を固定する。
| メソッド | 返すオブジェクト | 特性 |
|---|---|---|
getElementsByTagName | HTMLCollection | Live(動的に更新) |
getElementsByClassName | HTMLCollection | Live(動的に更新) |
querySelectorAll | NodeList | Static(固定) |
getElementById | HTMLElement | Static(単一要素) |
querySelectorやgetElementByIdは単一の要素を取得するため、厳密にはNodeListではないが、固定された結果を返す点でStaticと同じ扱いになる。
Live NodeListとStatic NodeListには、それぞれメリット・デメリットがある。
DOMが頻繁に変化する場面ではLive NodeListが便利。ただ、大量の要素を扱う場合はStatic NodeListのほうが負荷は少なく効率的。