Element.children

Une collection vivante des enfants directs d’un élément. Avec parentElement et nextElementSibling, elle sert à se déplacer dans l’arbre DOM.

Renvoie
Une collection vivante HTMLCollection avec les éléments enfants (elle peut être vide). Les autres propriétés renvoient un élément ou null.
Sur cette page

Exemple

#
JavaScript
const modules = document.querySelector('#modules')
const current = modules.querySelector('.current')

console.log(modules.children.length)
console.log(modules.children[0].textContent)
console.log(current.nextElementSibling.textContent)
console.log(current.parentElement)
console.log(modules.lastElementChild.nextElementSibling)
Console
3
Introduction
Attributs
<ul id="modules">
null

Définition et utilisation

#

La propriété children renvoie une collection HTMLCollection avec les enfants directs de l’élément, c’est-à-dire les éléments imbriqués un niveau plus bas. Elle ignore les nœuds de texte et les commentaires, donc les espaces et les retours à la ligne du code HTML ne posent pas de problème. Vous lisez le nombre d’enfants avec children.length, et un enfant précis par indice, par ex. list.children[0].

La collection est « vivante » : quand vous ajoutez ou retirez un enfant, le changement apparaît immédiatement dans children. Elle n’a pas de méthodes de tableau comme map() ou forEach(), mais vous la transformez facilement en tableau avec Array.from() ou [...element.children].

Toute une famille de propriétés sert à se déplacer dans l’arbre : parentElement indique le parent, firstElementChild et lastElementChild le premier et le dernier enfant, et nextElementSibling et previousElementSibling les éléments voisins au même niveau. Quand un tel élément n’existe pas, vous obtenez null.

Méfiez-vous des noms similaires sans le mot « Element » : childNodes, firstChild ou nextSibling renvoient tous les nœuds, y compris les nœuds de texte. Ce n’est généralement pas ce que vous cherchez.

Syntaxe

#
Syntaxe
element.children
element.children.length
element.children[index]

element.parentElement
element.firstElementChild
element.lastElementChild
element.nextElementSibling
element.previousElementSibling

Plus d’exemples

#
children et childNodes
JavaScript
const tasks = document.querySelector('#tasks')

console.log(tasks.children.length)
console.log(tasks.childNodes.length)
console.log(tasks.firstChild.nodeName)
console.log(tasks.firstElementChild.nodeName)
Console
2
5
#text
LI

childNodes compte aussi les trois nœuds de texte avec les retours à la ligne et les indentations entre les balises. firstChild indique le premier d’entre eux, et firstElementChild le premier élément <li>.

Collection vivante et conversion en tableau
JavaScript
const ranking = document.querySelector('#ranking')
const items = ranking.children

const newPlayer = document.createElement('li')
newPlayer.textContent = 'Emma'
ranking.append(newPlayer)

console.log(items.length)
console.log([...items].map((li) => li.textContent))
console.log(typeof items.map)
Console
3
['Léa', 'Lucas', 'Emma']
undefined

La variable items a été récupérée avant l’ajout d’Emma, et pourtant elle affiche trois éléments. La collection n’a pas de méthode map(), c’est pourquoi nous la transformons d’abord en tableau.

Passer à l’onglet voisin
JavaScript
const tabs = document.querySelector('#tabs')

function move(step) {
  const active = tabs.querySelector('.active')
  const next =
    step > 0
      ? active.nextElementSibling ?? tabs.firstElementChild
      : active.previousElementSibling ?? tabs.lastElementChild

  active.classList.remove('active')
  next.classList.add('active')
  console.log('Onglet actif :', next.textContent)
}

move(1)
move(1)
move(-1)
Console
Onglet actif : JS
Onglet actif : HTML
Onglet actif : JS

Après le dernier onglet, nextElementSibling renvoie null, donc l’opérateur ?? ramène la sélection au début. Cela fonctionne de la même façon dans l’autre sens.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Préférez les propriétés contenant le mot « Element » (firstElementChild, nextElementSibling). Les versions sans ce mot (firstChild, nextSibling) renvoient souvent un nœud de texte avec des espaces.
  • En supprimant des enfants dans une boucle sur children, faites d’abord une copie : [...list.children]. La collection est vivante, et après chaque suppression les indices se décalent, donc une partie des éléments serait sautée.
  • Pour chercher un ancêtre correspondant à un sélecteur, closest() est plus pratique que plusieurs parentElement successifs.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.