A nodeè il nome generico per qualsiasi tipo di oggetto nella gerarchia DOM. A nodepotrebbe essere uno degli elementi DOM incorporati come documento 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 nodecome 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 documentnodo avrebbe il suo elenco di nodi figlio (il headnodo e il bodynodo). Il bodynodo 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 ido 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à .nodeTypeche riporta che tipo di nodo è. Puoi vedere i vari tipi di nodi qui (diagramma da MDN ):

È possibile visualizzare un ELEMENT_NODEtipo di nodo particolare in cui la nodeTypeproprietà 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 nodeListperché è 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 nodeListche 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 HTMLCollectionche è 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 nodeListe an HTMLCollectionha 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.childrenproprietà restituisce un HTMLCollection live.