A nodeist der generische Name für einen beliebigen Objekttyp in der DOM-Hierarchie. A nodekann eines der integrierten DOM-Elemente wie documentoder sein document.body, es kann ein im HTML angegebenes HTML-Tag sein wie <input>oder <p>oder es kann ein Textknoten sein, der vom System erstellt wird, um einen Textblock in einem anderen Element zu halten . Kurz gesagt, a nodeist ein beliebiges DOM-Objekt.
An elementist ein bestimmter Typ, nodeda es viele andere Knotentypen gibt (Textknoten, Kommentarknoten, Dokumentknoten usw.).
Das DOM besteht aus einer Hierarchie von Knoten, wobei jeder Knoten einen übergeordneten Knoten, eine Liste von untergeordneten Knoten sowie einen nextSibling und einen previousSibling haben kann. Diese Struktur bildet eine baumartige Hierarchie. Der documentKnoten würde eine Liste von untergeordneten Knoten haben (der headKnoten und der bodyKnoten). Der bodyKnoten verfügt über eine Liste der untergeordneten Knoten (die Elemente der obersten Ebene in Ihrer HTML-Seite) usw.
A nodeListist also einfach eine Array-ähnliche Liste von nodes.
Ein Element ist ein bestimmter Knotentyp, der direkt im HTML mit einem HTML-Tag angegeben werden kann und Eigenschaften wie ein idoder ein haben kann class. kann untergeordnete Elemente usw. haben. Es gibt andere Knotentypen wie Kommentarknoten, Textknoten usw. mit unterschiedlichen Merkmalen. Jeder Knoten verfügt über eine Eigenschaft, .nodeTypedie angibt, um welchen Knotentyp es sich handelt. Sie können die verschiedenen Knotentypen hier sehen (Diagramm von MDN ):

Sie können sehen, dass ELEMENT_NODEes sich um einen bestimmten Knotentyp handelt, für den die nodeTypeEigenschaft den Wert hat 1.
Es document.getElementById("test")kann also nur ein Knoten zurückgegeben werden, und es handelt sich garantiert um ein Element (einen bestimmten Knotentyp). Aus diesem Grund wird nur das Element und keine Liste zurückgegeben.
Da document.getElementsByClassName("para")mehr als ein Objekt zurückgegeben werden kann, haben sich die Designer für die Rückgabe von a entschieden, nodeListda dies der Datentyp ist, den sie für eine Liste mit mehr als einem Knoten erstellt haben. Da dies nur Elemente sein können (normalerweise haben nur Elemente einen Klassennamen), enthält es technisch gesehen nodeListnur Knoten mit Typelementen, und die Designer hätten eine Sammlung mit einem anderen Namen erstellen können, die eine war elementList, aber sie haben sich dafür entschieden, nur einen Typ zu verwenden der Sammlung, ob es nur Elemente enthielt oder nicht.
BEARBEITEN: HTML5 definiert HTMLCollectioneine Liste von HTML-Elementen (kein Knoten, nur Elemente). Eine Reihe von Eigenschaften oder Methoden in HTML5 geben jetzt eine zurück HTMLCollection. Während es in der Schnittstelle zu a sehr ähnlich nodeListist, wird jetzt unterschieden, dass es nur Elemente enthält, keinen Knotentyp.
Die Unterscheidung zwischen a nodeListund an HTMLCollectionhat wenig Einfluss darauf, wie Sie eine verwenden (soweit ich das beurteilen kann), aber die Designer von HTML5 haben diese Unterscheidung jetzt getroffen.
Beispielsweise gibt die element.childrenEigenschaft eine Live-HTMLCollection zurück.