A node
ist der allgemeine Name für jede Art von Objekt in der DOM-Hierarchie. A node
könnte eines der eingebauten DOM-Elemente sein, wie z. B. document
o document.body
Es könnte ein HTML-Tag sein, der in der HTML-Datei angegeben ist, z. B. <input>
o <p>
oder es könnte ein Textknoten sein, der vom System erstellt wird, um einen Textblock innerhalb eines anderen Elements aufzunehmen. Kurz gesagt, ein node
ist ein beliebiges DOM-Objekt.
Eine element
ist eine besondere Art von node
da es viele andere Arten von Knoten gibt (Textknoten, Kommentarknoten, Dokumentenknoten, usw.).
Das DOM besteht aus einer Hierarchie von Knoten, bei der jeder Knoten einen übergeordneten Knoten, eine Liste von untergeordneten Knoten sowie einen nextSibling und previousSibling haben kann. Diese Struktur bildet eine baumartige Hierarchie. Die document
Knoten hat die html
Knoten als sein Kind. Die html
Knoten hat seine Liste von Kindknoten (die head
Knoten und der Knoten body
Knoten). Die Website body
Knoten hätte seine Liste von Kindknoten (die Elemente der obersten Ebene in Ihrer HTML-Seite) und so weiter.
Also, ein nodeList
ist einfach eine arrayartige Liste von nodes
.
Ein Element ist eine bestimmte Art von Knoten, die direkt in HTML mit einem HTML-Tag angegeben werden kann und Eigenschaften wie ein id
oder eine class
. können Kinder haben, usw... Es gibt noch andere Arten von Knoten, wie z.B. Kommentar-Knoten, Text-Knoten, etc... mit unterschiedlichen Eigenschaften. Jeder Knoten hat eine Eigenschaft .nodeType
die den Typ des Knotens angibt. Sie können die verschiedenen Arten von Knoten hier sehen (Diagramm aus MDN ):
Sie können eine ELEMENT_NODE
ist eine besondere Art von Knoten, bei der die nodeType
Eigenschaft hat einen Wert von 1
.
Also document.getElementById("test")
kann nur einen Knoten zurückgeben, und dieser ist garantiert ein Element (eine bestimmte Art von Knoten). Aus diesem Grund wird nur das Element und nicht eine Liste zurückgegeben.
Desde document.getElementsByClassName("para")
mehr als ein Objekt zurückgeben kann, haben sich die Designer für die Rückgabe eines nodeList
weil dies der Datentyp ist, der für eine Liste mit mehr als einem Knoten erstellt wurde. Da diese nur Elemente sein können (nur Elemente haben typischerweise einen Klassennamen), ist es technisch gesehen ein nodeList
die nur Knoten vom Typ Element enthält, und die Designer hätten eine anders benannte Sammlung erstellen können, die eine elementList
Sie entschieden sich jedoch dafür, nur eine Art von Sammlung zu verwenden, unabhängig davon, ob sie nur Elemente enthielt oder nicht.
EDITAR: HTML5 definiert eine HTMLCollection
die eine Liste von HTML-Elementen ist (keine Knoten, nur Elemente). Eine Reihe von Eigenschaften oder Methoden in HTML5 geben jetzt eine HTMLCollection
. Die Schnittstelle ähnelt zwar sehr stark der eines nodeList
wird nun dadurch unterschieden, dass es nur Elemente und nicht irgendeinen Knotentyp enthält.
Die Unterscheidung zwischen einer nodeList
und ein HTMLCollection
hat wenig Einfluss darauf, wie man es verwendet (soweit ich das beurteilen kann), aber die Designer von HTML5 haben diese Unterscheidung jetzt gemacht.
Zum Beispiel, die element.children
Eigenschaft gibt eine HTMLCollection zurück.