A node
è il nome generico per qualsiasi tipo di oggetto nella gerarchia DOM. A node
potrebbe essere uno degli elementi DOM incorporati come document
o document.body
, potrebbe essere un tag HTML specificato nell'HTML come <input>
o <p>
o potrebbe essere un nodo di testo creato dal sistema per contenere un blocco di testo all'interno di un altro elemento . Quindi, in poche parole, a node
è qualsiasi oggetto DOM.
Un element
è un tipo specifico di node
come ci sono molti altri tipi di nodi (nodi di testo, nodi di commento, nodi di documento, ecc ...).
Il DOM è costituito da una gerarchia di nodi in cui ogni nodo può avere un genitore, un elenco di nodi figlio e un fratello successivo e un fratello precedente. Quella struttura forma una gerarchia simile ad un albero. Il document
nodo avrebbe il suo elenco di nodi figlio (il head
nodo e il body
nodo). Il body
nodo avrebbe il suo elenco di nodi figlio (gli elementi di livello superiore nella tua pagina HTML) e così via.
Quindi, a nodeList
è semplicemente un elenco simile a array di nodes
.
Un elemento è un tipo specifico di nodo, che può essere specificato direttamente nell'HTML con un tag HTML e può avere proprietà come id
o o class
. può avere figli, ecc ... Esistono altri tipi di nodi come nodi di commento, nodi di testo, ecc ... con caratteristiche diverse. Ogni nodo ha una proprietà .nodeType
che riporta che tipo di nodo è. Puoi vedere i vari tipi di nodi qui (diagramma da MDN ):
È possibile visualizzare un ELEMENT_NODE
tipo di nodo particolare in cui la nodeType
proprietà ha un valore di 1
.
Quindi document.getElementById("test")
può restituire solo un nodo ed è garantito che sia un elemento (un tipo specifico di nodo). Per questo motivo restituisce solo l'elemento anziché un elenco.
Poiché document.getElementsByClassName("para")
può restituire più di un oggetto, i progettisti hanno scelto di restituire un nodeList
perché è il tipo di dati che hanno creato per un elenco di più di un nodo. Dal momento che questi possono essere solo elementi (solo gli elementi in genere hanno un nome di classe), è tecnicamente un nodeList
che contiene solo nodi di tipo elemento e i progettisti avrebbero potuto creare una raccolta con un nome diverso che era un elementList
, ma hanno scelto di usare solo un tipo di raccolta che contenesse o meno solo elementi.
EDIT: HTML5 definisce un HTMLCollection
che è un elenco di elementi HTML (non alcun nodo, solo elementi). Un certo numero di proprietà o metodi in HTML5 ora restituiscono un HTMLCollection
. Sebbene sia molto simile nell'interfaccia a nodeList
, ora viene fatta una distinzione in quanto contiene solo elementi, non alcun tipo di nodo.
La distinzione tra a nodeList
e an HTMLCollection
ha scarso impatto sul modo in cui ne usi uno (per quanto posso dire), ma i progettisti di HTML5 hanno ora fatto questa distinzione.
Ad esempio, la element.children
proprietà restituisce un HTMLCollection live.