A node
ist der generische Name für einen beliebigen Objekttyp in der DOM-Hierarchie. A node
kann eines der integrierten DOM-Elemente wie document
oder 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 node
ist ein beliebiges DOM-Objekt.
An element
ist ein bestimmter Typ, node
da 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 document
Knoten würde eine Liste von untergeordneten Knoten haben (der head
Knoten und der body
Knoten). Der body
Knoten verfügt über eine Liste der untergeordneten Knoten (die Elemente der obersten Ebene in Ihrer HTML-Seite) usw.
A nodeList
ist 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 id
oder 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, .nodeType
die angibt, um welchen Knotentyp es sich handelt. Sie können die verschiedenen Knotentypen hier sehen (Diagramm von MDN ):
Sie können sehen, dass ELEMENT_NODE
es sich um einen bestimmten Knotentyp handelt, für den die nodeType
Eigenschaft 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, nodeList
da 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 nodeList
nur 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 HTMLCollection
eine 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 nodeList
ist, wird jetzt unterschieden, dass es nur Elemente enthält, keinen Knotentyp.
Die Unterscheidung zwischen a nodeList
und an HTMLCollection
hat 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.children
Eigenschaft eine Live-HTMLCollection zurück.