HTMLの要素を操作する際JavaScriptのNodeList
オブジェクトを扱う場面は頻繁にあります。
本記事ではNodeList
から各要素のテキストを抽出する方法について解説し正しい記述例とよくある間違いを取り上げます。
目次
NodeListとは?
NodeList
は、document.querySelectorAll()
やchildNodes
メソッドの結果として得られるオブジェクトです。
これは配列のように見えますが完全な配列ではありません。
以下の点で配列と異なります。
- 配列メソッドの利用
一部の配列メソッド(map()
やfilter()
など)が直接使用できません。 - 動的NodeListと静的NodeList
childNodes
が返すNodeListは動的でDOMが変更されると自動的に更新されます。
一方querySelectorAll()
の結果は静的です。
NodeListからテキストを抽出する方法
以下は、NodeList
からテキストを抽出するための正しい方法の例です。
正しい方法1: Array.from()
Array.from()
を使用してNodeList
を配列に変換し、その後にmap()
メソッドでテキストを抽出します。
const nodeList = document.querySelectorAll('li');
const items = Array.from(nodeList, (item) => item.textContent);
console.log(items);
正しい方法2: スプレッド構文
スプレッド構文を利用して配列に変換し、map()
メソッドを使用します。
const nodeList = document.querySelectorAll('li');
const items = [...nodeList].map((item) => item.textContent);
console.log(items);
正しい方法3: forEach()
forEach()
を使って各要素を手動で処理する方法です。
const nodeList = document.querySelectorAll('li');
const items = [];
nodeList.forEach((item) => items.push(item.textContent));
console.log(items);
よくある間違い
NodeListをそのまま配列のように扱おうとするとエラーが発生します。以下は誤った例です。
誤り: map()の直接利用
NodeList
にはmap()
メソッドが実装されていないため、以下のコードはエラーになります。
const nodeList = document.querySelectorAll('li');
const items = nodeList.map((item) => item.textContent); // エラー
まとめ
JavaScriptでNodeList
を扱う際には、配列に変換する手順をしっかりと踏むことが重要です。本記事で紹介した正しい方法を用いることで、安全かつ効率的にDOM操作を行うことができます。