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
ou document.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é, a node
est n'importe quel objet DOM.
Une element
est un type spécifique de node
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 (le head
nœud et le body
nœud). Le body
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 de nodes
.
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 a class
. 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ù la nodeType
propriété a une valeur de 1
.
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 un nodeList
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 un nodeList
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 un elementList
, 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 à a nodeList
, 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 an 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, la element.children
propriété renvoie une HTMLCollection en direct.