--- title: NodeList slug: Web/API/NodeList tags: - API - DOM - Interfaccia - NodeList translation_of: Web/API/NodeList ---
Gli oggetti NodeList
sono un insieme di nodi, di solito restituiti da proprietà come {{domxref("Node.childNodes")}} ed il metodo {{domxref("document.querySelectorAll()")}}.
Nonostante NodeList
non sia un Array
, è possibile iterare su esso usando forEach()
. Può anche essere convertito in un vero Array
usando Array.from()
.
Tuttavia, alcuni browser meno recenti non hanno implementato NodeList.forEach()
né Array.from()
. Questo può essere aggirato usando {{jsxref("Array.forEach()", "Array.prototype.forEach()")}} — vedi l'esempio di questo documento.
In alcuni casi, la NodeList
è dinamica, ciò significa che i cambiamenti nel DOM si riflettono sulla collezione. Per esempio, {{domxref("Node.childNodes")}} è dinamico:
var parent = document.getElementById('parent'); var child_nodes = parent.childNodes; console.log(child_nodes.length); // assume "2" parent.appendChild(document.createElement('div')); console.log(child_nodes.length); // dovrebbe produrre "3"
In altri casi, la NodeList
è statica, ciò vuol dire che il contenuto della collezione non è influenzato da quelli nel DOM. {{domxref("document.querySelectorAll()")}} restituisce una NodeList
statica.
È bene tenere in mente questa distinzione quando si sceglie di iterare sugli elementi nella NodeList
, ed in particolare al modo in cui si salva la lunghezza della lista.
NodeList
.null
se l'indice è fuori misura.nodeList[i]
(che invece restituisce undefined quando i
è fuori dai limiti). Ciò è utile soprattutto per le implementazioni DOM di linguaggi non JavaScript.NodeList
passando l'elemento come argomento alla funzione.È possibile iterare sugli elementi in una NodeList
usando un for loop:
for (var i = 0; i < myNodeList.length; i++) { var item = myNodeList[i]; // La chiamata myNodeList.item(i) non è necessaria in JavaScript }
Non utilizzare for...in
o for each...in
per enumerare gli elementi nelle NodeList
, poiché enumereranno anche le proprietà length
e item
e causeranno errori se il tuo script presume che debba occuparsi solo di oggetti {{domxref("element")}}. Inoltre, for..in
non garantisce la visita delle proprietà in un particolare ordine.
for...of
itererà sugli oggetti NodeList
correttamente:
var list = document.querySelectorAll( 'input[type=checkbox]' ); for (var item of list) { item.checked = true; }
I browser recenti supportano anche metodi iteratori, {{domxref("NodeList.forEach()", "forEach()")}}, come {{domxref("NodeList.entries()", "entries()")}}, {{domxref("NodeList.values()", "values()")}}, e {{domxref("NodeList.keys()", "keys()")}}.
Esiste anche un modo compatibile con Internet Explorer {{jsxref("Array.forEach()", "Array.prototype.forEach")}} per l'iterazione.
var list = document.querySelectorAll( 'input[type=checkbox]' ); Array.prototype.forEach.call(list, function (item) { item.checked = true; });
Specifica | Stato | Commento |
---|---|---|
{{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') }} |
Definizione iniziale. |
{{Compat("api.NodeList")}}