Aller au contenu

Sélection d'éléments DOM en JavaScript

Comprendre comment sélectionner des éléments DOM en JavaScript est crucial pour tout développeur web. Ce guide complet couvrira toutes les méthodes et techniques essentielles pour sélectionner efficacement des éléments DOM, garantissant ainsi la dynamique et l'interactivité de vos applications web.

Introduction à la sélection d'éléments DOM

Le Document Object Model (DOM) est une interface de programmation pour les documents web. Il représente la page afin que les programmes puissent modifier la structure, le style et le contenu du document. Sélectionner efficacement des éléments DOM est la première étape pour manipuler des pages web avec JavaScript.

Utilisation de getElementById

L'une des méthodes les plus simples et les plus couramment utilisées consiste à sélectionner un élément unique par son ID.


javascript
const element = document.getElementById('example');
element.textContent = "You clicked the button!";

Dans cet exemple, nous utilisons getElementById pour sélectionner l'élément ayant l'ID example et mettre à jour son contenu textuel.

Utilisation de getElementsByClassName

Cette méthode retourne une HTMLCollection dynamique (live) d'éléments portant le nom de classe spécifié. Elle est essentielle pour cibler plusieurs éléments.


javascript
const elements = document.getElementsByClassName('example');
Array.from(elements).forEach((element, index) => {
    element.textContent = `Element ${index + 1} changed!`;
});

Ici, getElementsByClassName sélectionne tous les éléments possédant la classe example. Le code itère ensuite sur la collection pour mettre à jour le contenu textuel de chaque élément.

INFO

Convertissez toujours la HTMLCollection en tableau en utilisant Array.from() pour pouvoir utiliser des méthodes de tableau comme forEach(). Notez que cette méthode retourne une collection dynamique (live), ce qui signifie qu'elle se met automatiquement à jour lorsque le DOM change.

Utilisation de getElementsByTagName

Sélectionne tous les éléments portant le nom de balise spécifié, en fournissant une HTMLCollection dynamique.


javascript
const paragraphs = document.getElementsByTagName('p');
for (let i = 0; i < paragraphs.length; i++) {
    paragraphs[i].style.backgroundColor = 'yellow';
}

Dans cet exemple, getElementsByTagName sélectionne tous les éléments p. La boucle met ensuite en surbrillance chaque paragraphe en changeant sa couleur de fond en jaune.

Utilisation de querySelector

La méthode querySelector retourne le premier élément qui correspond à un sélecteur CSS spécifié.


javascript
const element = document.querySelector('.example');
element.style.backgroundColor = 'lightblue';

Ici, querySelector sélectionne le premier élément possédant la classe example, et sa couleur de fond est modifiée en bleu clair.

INFO

Utilisez querySelector pour sélectionner le premier élément correspondant et querySelectorAll pour sélectionner tous les éléments correspondants.

Utilisation de querySelectorAll

Cette méthode retourne un NodeList statique d'éléments correspondant au sélecteur CSS spécifié.


javascript
const elements = document.querySelectorAll('.example');
elements.forEach((element, index) => {
    element.style.backgroundColor = 'lightgreen';
    element.textContent = `Element ${index + 1} highlighted!`;
});

Dans cet exemple, querySelectorAll sélectionne tous les éléments possédant la classe example. Le code met ensuite à jour la couleur de fond et le contenu textuel de chaque élément sélectionné.

INFO

querySelectorAll retourne un NodeList statique, qui ne se met pas automatiquement à jour lorsque le DOM change. Cela contraste avec getElementsByClassName et getElementsByTagName, qui retournent des HTMLCollections dynamiques. Bien que forEach soit pris en charge dans tous les navigateurs modernes, les environnements hérités peuvent nécessiter Array.from(elements).forEach(...).

Utilisation de matches

La méthode matches vérifie si un élément correspond à un sélecteur CSS donné.


javascript
const element = document.getElementById('test');
if (element.matches('.example')) {
    element.style.color = 'red';
    element.textContent = "Element matches the selector!";
}

Ici, matches est utilisé pour vérifier si l'élément ayant l'ID test possède la classe example. Si c'est le cas, le contenu textuel et la couleur sont mis à jour.

Utilisation de closest

La méthode closest parcourt l'élément et ses ancêtres pour trouver le plus proche qui correspond au sélecteur fourni.


javascript
const element = document.getElementById('child');
const parent = element.closest('.outer');
parent.style.border = '2px solid red';

Dans cet exemple, closest trouve l'ancêtre le plus proche possédant la classe outer pour l'élément ayant l'ID child, et sa bordure est modifiée en rouge.

INFO

Utilisez closest pour trouver l'ancêtre le plus proche, ce qui est très utile pour la délégation d'événements.

Combinaison de sélecteurs

Les sélecteurs peuvent être combinés pour un ciblage plus précis.


javascript
const element = document.querySelector('.example.special');
element.style.backgroundColor = 'pink';
element.textContent = "Special element highlighted!";

Ici, nous combinons des sélecteurs pour cibler l'élément possédant à la fois les classes example et special, en mettant à jour sa couleur de fond et son contenu textuel.

Conclusion

Maîtriser la sélection d'éléments DOM en JavaScript est fondamental pour tout développeur web. En utilisant les différentes méthodes abordées, vous pouvez cibler et manipuler efficacement des éléments pour créer des applications web dynamiques et interactives.

INFO

Note sur les performances : Les méthodes héritées comme getElementById et getElementsByClassName sont hautement optimisées dans les navigateurs modernes. Pour les requêtes complexes, querySelector et querySelectorAll sont généralement préférés pour leur flexibilité et leur prise en charge des sélecteurs CSS, bien qu'ils puissent être légèrement plus lents sur des DOM extrêmement volumineux. Privilégiez toujours les collections statiques (querySelectorAll) pour des raisons de performances lors de l'itération, car les collections dynamiques (getElementsBy...) déclenchent des reflows à chaque modification du DOM. Notez que querySelectorAll est hautement optimisé et suffisamment rapide pour les cas d'utilisation typiques.

Pratique

Parmi les méthodes suivantes, laquelle peut être utilisée pour sélectionner des éléments DOM en JavaScript ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.