Element.closest()

Renvoie l’ancêtre le plus proche (ou l’élément lui-même) qui correspond à un sélecteur CSS, ou null.

Renvoie
L’élément correspondant le plus proche (cela peut être l’élément lui-même), ou null.
Sur cette page

Exemple

#
JavaScript
const icon = document.querySelector('.icon')

console.log(icon.closest('button'))
console.log(icon.closest('.card').dataset.id)
console.log(icon.closest('.sidebar'))
console.log(icon.closest('span') === icon)
Console
<button class="buy">
7
null
true

Définition et utilisation

#

La méthode closest() remonte l’arbre DOM depuis l’élément : elle vérifie d’abord l’élément lui-même, puis son parent, son grand-parent, et ainsi de suite. Elle renvoie le premier élément qui correspond au sélecteur, ou null si elle atteint le début du document sans rien trouver.

C’est un outil essentiel pour la délégation d’événements. Quand l’utilisateur clique sur une icône à l’intérieur d’un bouton, et que ce bouton se trouve dans une carte produit, event.target.closest(".card") trouve immédiatement la carte, quel que soit le fragment sur lequel le clic est tombé.

N’oubliez pas que closest() prend en compte l’élément de départ lui-même. Elle fonctionne dans le sens inverse de querySelector(), qui cherche vers le bas, parmi les descendants.

Syntaxe

#
Syntaxe
element.closest(selectors)

Paramètres

#
  • selectors

    chaîne

    Un sélecteur CSS, par ex. ".card", "li" ou "[data-id]".

Plus d’exemples

#
Délégation d’événements
JavaScript
const catalog = document.querySelector('#catalog')

catalog.addEventListener('click', (event) => {
  const button = event.target.closest('.buy')
  if (!button) return
  const card = button.closest('.card')
  console.log(`Ajouté au panier : ${card.dataset.course}`)
})

catalog.querySelector('b').click()
Console
Ajouté au panier : CSS
Fermer le menu en cliquant à côté
JavaScript
const menu = document.querySelector('#menu')

document.addEventListener('click', (event) => {
  if (!event.target.closest('#menu')) {
    menu.classList.remove('open')
  }
  console.log('Menu ouvert :', menu.classList.contains('open'))
})

document.querySelector('#menu button').click()
document.querySelector('#content').click()
Console
Menu ouvert : true
Menu ouvert : false

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

#
  • Avec la délégation d’événements, vérifiez toujours que closest() a trouvé quelque chose (if (!button) return), car le clic a pu tomber à côté.
  • N’oubliez pas que closest() vérifie aussi l’élément lui-même : button.closest("button") renverra ce même bouton.
  • Pour chercher vers le bas, parmi les descendants, utilisez querySelector().

Entrées associées

#

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