コンテンツにスキップ

JavaScript/DOM/NodeList

出典: フリー教科書『ウィキブックス(Wikibooks)』

以下は、Wikitext形式で書かれた「NodeList」の解説です。

NodeList(ノードリスト)

[編集]

NodeListは、DOM(Document Object Model)において、複数のノード(Nodeオブジェクト)を表すリストです。これは、ページ内の要素を扱う際に頻繁に使用され、主にquerySelectorAll()childNodesメソッドを通じて取得されます。

NodeListは配列に似ていますが、いくつか異なる特徴を持っています。例えば、NodeListは厳密には配列ではなく、配列のようなインターフェースを提供するオブジェクトです。

NodeListの特徴

[編集]
  • ライブと静的: NodeListは、ライブ(動的)または静的(静的)なコレクションとして存在する場合があります。ライブNodeListは、ページのDOMが変更されると自動的に更新されます。静的NodeListは、作成時の状態に基づいて固定され、変更されません。
  • インデックスアクセス: NodeListは、インデックスを使用して要素にアクセスすることができます(例: nodeList[0])。
  • forEachメソッド: NodeListは、forEach()メソッドをサポートしており、これを使ってノードを繰り返し処理することができます。

主なメソッドとプロパティ

[編集]

1. lengthプロパティ

[編集]

NodeListlengthプロパティは、リスト内のノードの数を返します。これを使って、リストを反復処理する際に役立ちます。

const nodeList = document.querySelectorAll("div");
console.log(nodeList.length); // ノードの数を表示

2. item()メソッド

[編集]

item()メソッドを使うことで、インデックスに基づいてNodeListから特定のノードを取得できます。

const nodeList = document.querySelectorAll("div");
const firstDiv = nodeList.item(0); // 最初のdiv要素を取得

3. forEach()メソッド

[編集]

NodeListforEach()メソッドをサポートしており、リスト内の各ノードに対してコールバック関数を実行することができます。これは配列と似たような動作をします。

const nodeList = document.querySelectorAll("div");
nodeList.forEach(node => console.log(node)); // 各div要素を表示

4. childNodesプロパティ

[編集]

childNodesプロパティは、指定されたノードのすべての子ノードを含むNodeListを返します。これには、要素ノードだけでなく、テキストノードやコメントノードなども含まれる点に注意が必要です。

const parentElement = document.getElementById("parent");
const children = parentElement.childNodes;
console.log(children); // 子ノードのリストを表示

5. querySelectorAll()メソッド

[編集]

querySelectorAll()メソッドは、CSSセレクタを使ってページ内の複数の要素を取得するために使われます。これが返すのは、NodeListオブジェクトです。

const nodeList = document.querySelectorAll("p.someClass");
console.log(nodeList); // pタグでsomeClassクラスを持つ要素のリストを表示

NodeListと配列の違い

[編集]

NodeListは配列に似ていますが、いくつかの重要な違いがあります:

  • NodeListは、配列のようにインデックスでアクセスできますが、配列メソッド(map(), filter(), reduce()など)は使用できません。これらを使いたい場合は、NodeListを配列に変換する必要があります。
  • NodeListは、forEach()をサポートしますが、古いブラウザではサポートされていないことがあります。
配列に変換する方法の例
const nodeList = document.querySelectorAll("div");
const array = Array.from(nodeList); // NodeListを配列に変換
array.map(node => console.log(node)); // 配列メソッドを使用可能

まとめ

[編集]

NodeListは、複数のDOMノードを表すオブジェクトであり、主にquerySelectorAll()childNodesなどのメソッドで返されます。NodeListは配列に似た操作が可能ですが、配列のメソッドを直接使用できないため、必要に応じて配列に変換することが推奨されます。これを使うことで、ページ内の複数の要素を効率的に操作できます。