A node
est le nom générique de tout type d'objet dans la hiérarchie DOM. A node
pourrait être l'un des éléments DOM intégrés tels que document
o document.body
il peut s'agir d'une balise HTML spécifiée dans le code HTML, telle que <input>
o <p>
Il peut aussi s'agir d'un nœud de texte créé par le système pour contenir un bloc de texte dans un autre élément. Donc, en résumé, un node
est un objet DOM quelconque.
En element
est un type spécifique de node
comme il existe de nombreux autres types de nœuds (nœuds de texte, nœuds de commentaire, nœuds de document, etc...).
Le DOM consiste en 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 site document
Le nœud a le html
comme son enfant. Le site html
a sa liste de nœuds enfants (le nœud head
et le body
nœud). Le site body
aurait sa liste de nœuds enfants (les éléments de premier niveau dans votre page HTML) et ainsi de suite.
Donc, un nodeList
est simplement une liste de nodes
.
Un élément est un type spécifique de nœud, qui peut être directement spécifié dans le code HTML avec une balise HTML et qui peut avoir des propriétés telles qu'une balise de type id
ou un class
. peut avoir des enfants, etc... Il existe d'autres types de noeuds tels que les noeuds de commentaire, les noeuds de texte, etc... avec des caractéristiques différentes. Chaque noeud 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 (diagramme de MDN ):
Vous pouvez voir un ELEMENT_NODE
est un type particulier de nœud où le nodeType
a une valeur de 1
.
Alors document.getElementById("test")
ne peut retourner qu'un seul noeud et il est garanti qu'il s'agit d'un élément (un type spécifique de noeud). Pour cette raison, elle renvoie juste l'élément plutôt qu'une liste.
Desde document.getElementsByClassName("para")
peut renvoyer plus d'un objet, les concepteurs ont choisi de renvoyer un objet de type nodeList
car c'est le type de données qu'ils ont créé pour une liste de plus d'un nœud. Puisqu'il ne peut s'agir que d'éléments (seuls les éléments ont généralement un nom de classe), il s'agit techniquement d'une classe nodeList
qui ne contient que des nœuds de type élément, et les concepteurs auraient pu créer une collection portant un nom différent, qui serait un elementList
mais ils ont choisi d'utiliser un seul type de collection, qu'elle ne contienne que des éléments ou non.
EDITAR: 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 de HTML5 renvoient maintenant un fichier de type HTMLCollection
. Bien que son interface soit très similaire à celle d'un nodeList
Une distinction est maintenant faite en ce sens qu'il ne contient que des éléments, et non un quelconque type de nœud.
La distinction entre un nodeList
et un HTMLCollection
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, le element.children
renvoie un HTMLCollection vivant.
27 votes
Il existe 12 types de nœuds, dont l'élément.
0 votes
Ces 12 types ne sont-ils pas tous des objets élémentaires ? Comme 1 = ELEMENT_NODE, 3 = TEXT_NODE, je pense que les deux sont des objets élémentaires.
6 votes
Non, ils ne le sont pas. L'élément n'est qu'un seul type de nœud.
0 votes
Est-il encore utilisé de nos jours ? Je pose la question car dans la documentation de Mozilla, il est dit : var elements = document.getElementsByClassName(names) ; elements est une collection HTML en direct des éléments trouvés. Donc, apparemment, getElementsByClassName ne renvoie plus une NodeList.
0 votes
Le WHATWG :
The nodes representing HTML elements in the DOM...
(3.2.2). Un pince-sans-rire pourrait y puiser es une sorte de différence ici. Néanmoins, il semble que la spécification utilise ces termes (nœuds DOM représentant des éléments HTML et juste des éléments HTML) de manière interchangeable.