Je suis totalement confus entre l'objet Node et l'objet Element.
document.getElementById()
renvoie l'objet Element tandis que document.getElementsByClassName()
renvoie l'objet NodeList (Collection d'éléments ou de nœuds?)
Si un div est un objet Element, qu'en est-il de l'objet Node div?
Qu'est-ce qu'un objet nœud?
L'objet document, l'objet élément et l'objet texte sont-ils également un objet nœud?
Selon le livre de David Flanagan «L'objet Document, ses objets éléments et objets texte sont tous des objets Node».
Alors, comment se fait-il qu'un objet puisse hériter des propriétés / méthodes de l'objet Element ainsi que de l'objet Node?
Si oui, je suppose que la classe Node et la classe Element sont liées dans l'arbre d'héritage prototypique.
<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]
Réponses:
A
node
est le nom générique de tout type d'objet dans la hiérarchie DOM. Anode
pourrait être l'un des éléments DOM intégrés tels quedocument
oudocument.body
, il pourrait s'agir d'une balise HTML spécifiée dans le HTML, telle que<input>
ou<p>
ou ce pourrait être un nœud de texte créé par le système pour contenir un bloc de texte à l'intérieur d'un autre élément . Donc, en résumé, anode
est n'importe quel objet DOM.Une
element
est un type spécifique denode
car il existe de nombreux autres types de nœuds (nœuds de texte, nœuds de commentaire, nœuds de document, etc ...).Le DOM se compose d'une hiérarchie de nœuds où chaque nœud peut avoir un parent, une liste de nœuds enfants et un nextSibling et previousSibling. Cette structure forme une hiérarchie arborescente. Le
document
nœud aurait sa liste de nœuds enfants (lehead
nœud et lebody
nœud). Lebody
nœud aurait sa liste de nœuds enfants (les éléments de niveau supérieur dans votre page HTML) et ainsi de suite.Donc, a
nodeList
est simplement une liste de type tableau denodes
.Un élément est un type spécifique de nœud, qui peut être directement spécifié dans le HTML avec une balise HTML et peut avoir des propriétés comme an
id
ou aclass
. peut avoir des enfants, etc ... Il existe d'autres types de nœuds tels que les nœuds de commentaire, les nœuds de texte, etc ... avec des caractéristiques différentes. Chaque nœud a une propriété.nodeType
qui indique de quel type de nœud il s'agit. Vous pouvez voir les différents types de nœuds ici (schéma de MDN ):Vous pouvez voir un
ELEMENT_NODE
est un type particulier de nœud où lanodeType
propriété a une valeur de1
.Il
document.getElementById("test")
ne peut donc renvoyer qu'un seul nœud et il est garanti qu'il s'agit d'un élément (un type spécifique de nœud). Pour cette raison, il renvoie simplement l'élément plutôt qu'une liste.Étant donné que
document.getElementsByClassName("para")
peut renvoyer plusieurs objets, les concepteurs ont choisi de renvoyer unnodeList
car c'est le type de données qu'ils ont créé pour une liste de plusieurs nœuds. Étant donné que ceux-ci ne peuvent être que des éléments (seuls les éléments ont généralement un nom de classe), c'est techniquement unnodeList
qui ne contient que des nœuds d'élément type et les concepteurs auraient pu créer une collection nommée différemment qui était unelementList
, mais ils ont choisi d'utiliser un seul type de collection, qu’elle contienne ou non des éléments.EDIT: HTML5 définit un
HTMLCollection
qui est une liste d'éléments HTML (pas n'importe quel nœud, seulement des éléments). Un certain nombre de propriétés ou de méthodes en HTML5 renvoient désormais unHTMLCollection
. Bien qu'il soit très similaire dans l'interface à anodeList
, une distinction est maintenant faite en ce qu'il ne contient que des éléments, pas n'importe quel type de nœud.La distinction entre un
nodeList
et anHTMLCollection
a peu d'impact sur la façon dont vous en utilisez un (pour autant que je sache), mais les concepteurs de HTML5 ont maintenant fait cette distinction.Par exemple, la
element.children
propriété renvoie une HTMLCollection en direct.la source
Node
est de mettre en œuvre une structure arborescente, de sorte que ses méthodes sont pourfirstChild
,lastChild
,childNodes
, etc. Il est plus d'une classe pour une structure arborescente générique.Et puis, certains
Node
objets sont aussi desElement
objets.Element
hérite deNode
.Element
les objets représentent en fait les objets spécifiés dans le fichier HTML par les balises telles que<div id="content"></div>
. LaElement
classe définit des propriétés et des méthodes telles queattributes
,id
,innerHTML
,clientWidth
,blur()
etfocus()
.Certains
Node
objets sont des nœuds de texte et ce ne sont pas desElement
objets. ChaqueNode
objet a unenodeType
propriété qui indique de quel type de nœud il s'agit, pour les documents HTML:Nous pouvons voir quelques exemples dans la console:
La dernière ligne ci-dessus montre que
Element
hérite deNode
. (cette ligne ne fonctionnera pas dans IE à cause de__proto__
. Elle devra utiliser Chrome, Firefox ou Safari).Soit dit en passant, l'
document
objet est le haut de l'arborescence des nœuds, etdocument
est unDocument
objet, etDocument
hériteNode
également de:Voici quelques documents pour les classes Node et Element:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
la source
<span data-a="1" >123</span>
? cette plage est un élément qui a son propre nœud. mais l'attribut a-t-il également son propre nœud?Meilleure source d'informations pour tous vos problèmes DOM
http://www.w3.org/TR/dom/#nodes
"Les objets implémentant l'interface Document, DocumentFragment, DocumentType, Element, Text, ProcessingInstruction ou Comment (simplement appelés nœuds) participent à une arborescence."
http://www.w3.org/TR/dom/#element
"Les nœuds d'éléments sont simplement appelés éléments."
la source
Noeud: http://www.w3schools.com/js/js_htmldom_nodes.asp
L'objet Node représente un seul nœud dans l'arborescence du document. Un nœud peut être un nœud d'élément, un nœud d'attribut, un nœud de texte ou tout autre type de nœud expliqué dans le chapitre Types de nœud.
Élément: http://www.w3schools.com/js/js_htmldom_elements.asp
L'objet Element représente un élément dans un document XML. Les éléments peuvent contenir des attributs, d'autres éléments ou du texte. Si un élément contient du texte, le texte est représenté dans un nœud de texte.
dupliquer :
la source
Le nœud est utilisé pour représenter les balises en général. Divisé en 3 types:
Remarque sur les attributs: est le nœud qui, à l'intérieur, a des attributs. Exp:
<p id=”123”></p>
Nœud de texte: est un nœud qui, entre l'ouverture et la fermeture, a un contenu texte contien. Exp:
<p>Hello</p>
Nœud d'élément: est le nœud qui, à l'intérieur, a d'autres balises. Exp:
<p><b></b></p>
Chaque nœud peut être de type simultanément, pas nécessairement uniquement d'un seul type.
L'élément est simplement un nœud d'élément.
la source