--- title: NodeList slug: Web/API/NodeList tags: - API - DOM - Interface - NodeList - インターフェイス translation_of: Web/API/NodeList ---
NodeList オブジェクトは{{Glossary("Node/DOM", "ノード")}}の集合であり、 {{domxref("Node.childNodes")}} などのプロパティや {{domxref("document.querySelectorAll()")}} などのメソッドの返値として用いられます。
NodeList は Array とは異なりますが、 forEach() メソッドで処理を反復適用することは可能です。 {{jsxref("Array.from()")}} を使うことで Array に変換することができます。
ただし、古いブラウザーでは NodeList.forEach() も Array.from() も実装されていない場合があります。これらの制限は {{jsxref("Array.forEach()", "Array.prototype.forEach()")}} を使うことで回避することが可能です (この文書に詳しく書かれています)。
場合によっては、 NodeList がライブであること、すなわち DOM 内が更新されると自動的にコレクションが更新されることがあります。例えば、 {{domxref("Node.childNodes")}} はライブです。
var parent = document.getElementById('parent');
var child_nodes = parent.childNodes;
console.log(child_nodes.length); // "2" と仮定すると
parent.appendChild(document.createElement('div'));
console.log(child_nodes.length); // "3" が出力される
一方、 NodeList が静的である場合、すなわち DOM 内の変更がコレクションの内容に影響を与えない場合もあります。 {{domxref("document.querySelectorAll()")}} メソッドは、静的な NodeList を返します。
NodeList の各要素に反復処理を行う方法を選択したり、リストの長さをキャッシュしたりする場合は、この違いを考えておくといいでしょう。
NodeList に含まれるノードの数です。null を返します。nodeList[i] のアクセスの代替手段です (この場合、i が範囲外の時には undefined が返ります)。これは JavaScript 以外の言語による DOM の実装で便利です。NodeList の各要素に対して実行し、その要素を関数の引数として渡します。NodeList の各要素について処理を順次適用するには、以下のような方法があります。
for (var i = 0; i < myNodeList.length; i++) {
var item = myNodeList[i];
}
リストの要素について処理を回すために {{jsxref("Statements/for...in", "for...in")}} や {{jsxref("Statements/for_each...in", "for each...in")}} を用いてはいけません。なぜなら、 NodeList のプロパティである要素に加えて、 length プロパティについても処理が適用されるため、 {{domxref("element")}} オブジェクトのみ処理すべきスクリプトではエラーが生じます。また、for..in で取得されるプロパティの順番は保証されていません。
{{jsxref("Statements/for...of", "for...of")}} ループであれば、 NodeList オブジェクトを正しく扱うことができます。
var list = document.querySelectorAll('input[type=checkbox]');
for (var checkbox of list) {
checkbox.checked = true;
}
最近のブラウザでは、イテレーターに基づくメソッドとして {{domxref("NodeList.forEach()", "forEach()")}}, {{domxref("NodeList.entries()", "entries()")}}, {{domxref("NodeList.values()", "values()")}}, {{domxref("NodeList.keys()", "keys()")}} に対応しています。
また、 Internet Explorer と互換性がある手法として、反復に {{jsxref("Array.forEach()", "Array.prototype.forEach")}} を使用することができます。
var list = document.querySelectorAll('input[type=checkbox]');
Array.prototype.forEach.call(list, function (checkbox) {
checkbox.checked = true;
});
| 仕様書 | 状態 | 備考 |
|---|---|---|
| {{SpecName('DOM WHATWG', '#interface-nodelist', 'NodeList')}} | {{ Spec2('DOM WHATWG') }} | |
| {{SpecName('DOM3 Core', 'core.html#ID-536297177', 'NodeList')}} | {{ Spec2('DOM3 Core') }} | |
| {{SpecName('DOM2 Core', 'core.html#ID-536297177', 'NodeList')}} | {{ Spec2('DOM2 Core') }} | |
| {{SpecName('DOM1', 'level-one-core.html#ID-536297177', 'NodeList')}} | {{ Spec2('DOM1') }} | 初回定義 |
{{Compat("api.NodeList")}}