Ich bin total verwirrt zwischen Knotenobjekt und Elementobjekt.
Gibt das document.getElementById()
Element-Objekt zurück, während document.getElementsByClassName()
das NodeList-Objekt zurückgegeben wird (Sammlung von Elementen oder Knoten?)
Wenn ein div ein Elementobjekt ist, was ist dann mit dem div-Knotenobjekt?
Was ist ein Knotenobjekt?
Sind Dokumentobjekt, Elementobjekt und Textobjekt auch Knotenobjekt?
Gemäß David Flanagans Buch "Das Dokumentobjekt, seine Elementobjekte und Textobjekte sind alle Knotenobjekte".
Wie kommt es, dass ein Objekt sowohl Eigenschaften / Methoden des Elementobjekts als auch des Knotenobjekts erben kann?
Wenn ja, sind Knotenklasse und Elementklasse im prototypischen Vererbungsbaum verwandt.
<div id="test">
<p class="para"> 123 </p>
<p class="para"> abc </p>
</div>
<p id="id_para"> next </p>
document.documentElement.toString(); // [object HTMLHtmlElement]
var div = document.getElementById("test");
div.toString(); // [object HTMLDivElement]
var p1 = document.getElementById("id_para");
p1.toString(); // [object HTMLParagraphElement]
var p2 = document.getElementsByClassName("para");
p2.toString(); //[object HTMLCollection]
javascript
html
dom
PK
quelle
quelle
Antworten:
A
node
ist der generische Name für einen beliebigen Objekttyp in der DOM-Hierarchie. Anode
kann eines der integrierten DOM-Elemente wiedocument
oder seindocument.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, anode
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 (derhead
Knoten und derbody
Knoten). Derbody
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 vonnodes
.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 kannclass
. 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 dienodeType
Eigenschaft den Wert hat1
.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 gesehennodeList
nur Knoten mit Typelementen, und die Designer hätten eine Sammlung mit einem anderen Namen erstellen können, die eine warelementList
, 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ückHTMLCollection
. Während es in der Schnittstelle zu a sehr ähnlichnodeList
ist, wird jetzt unterschieden, dass es nur Elemente enthält, keinen Knotentyp.Die Unterscheidung zwischen a
nodeList
und anHTMLCollection
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.quelle
Node
ist für eine Baumstruktur der Umsetzung, so seine Methoden sind fürfirstChild
,lastChild
,childNodes
usw. Es ist mehr eine Klasse für eine generische Baumstruktur ist.Und dann sind einige
Node
Objekte auchElement
Objekte.Element
erbt vonNode
.Element
Objekte repräsentiert tatsächlich die Objekte, wie sie in der HTML-Datei durch die Tags wie angegeben sind<div id="content"></div>
. DieElement
Klasse definiert Eigenschaften und Methoden , wie zum Beispielattributes
,id
,innerHTML
,clientWidth
,blur()
, undfocus()
.Einige
Node
Objekte sind Textknoten und keineElement
Objekte. JedesNode
Objekt verfügt über einenodeType
Eigenschaft, die angibt, um welchen Knotentyp es sich bei HTML-Dokumenten handelt:Wir können einige Beispiele in der Konsole sehen:
Die letzte Zeile oben zeigt, dass von
Element
erbtNode
. (Diese Zeile funktioniert im IE aufgrund von nicht__proto__
. Sie muss Chrome, Firefox oder Safari verwenden.)Übrigens ist das
document
Objekt die Spitze des Knotenbaums unddocument
einDocument
Objekt undDocument
erbt auch vonNode
:Hier sind einige Dokumente für die Node- und Element-Klassen:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
quelle
<span data-a="1" >123</span>
? Diese Spanne ist ein Element mit einem eigenen Knoten. Aber hat das Attribut auch einen eigenen Knoten?Beste Informationsquelle für alle Ihre DOM-Probleme
http://www.w3.org/TR/dom/#nodes
"Objekte, die die Schnittstelle Document, DocumentFragment, DocumentType, Element, Text, ProcessingInstruction oder Comment (einfach als Knoten bezeichnet) implementieren, nehmen an einem Baum teil."
http://www.w3.org/TR/dom/#element
"Elementknoten werden einfach als Elemente bezeichnet."
quelle
Knoten: http://www.w3schools.com/js/js_htmldom_nodes.asp
Das Knotenobjekt repräsentiert einen einzelnen Knoten in der Dokumentstruktur. Ein Knoten kann ein Elementknoten, ein Attributknoten, ein Textknoten oder ein anderer der im Kapitel Knotentypen erläuterten Knotentypen sein.
Element: http://www.w3schools.com/js/js_htmldom_elements.asp
Das Element-Objekt repräsentiert ein Element in einem XML-Dokument. Elemente können Attribute, andere Elemente oder Text enthalten. Wenn ein Element Text enthält, wird der Text in einem Textknoten dargestellt.
Duplikat:
quelle
Der Knoten wird verwendet, um Tags im Allgemeinen darzustellen. In 3 Typen unterteilt:
Attribut Hinweis: ist ein Knoten, der Attribute enthält. Exp:
<p id=”123”></p>
Textknoten: ist ein Knoten, der zwischen dem Öffnen und Schließen einen Contian-Textinhalt hat. Exp:
<p>Hello</p>
Elementknoten: ist ein Knoten, der in seinem Inneren andere Tags hat. Exp:
<p><b></b></p>
Jeder Knoten kann gleichzeitig ein Typ sein, nicht unbedingt nur ein einzelner Typ.
Element ist einfach ein Elementknoten.
quelle