M05 · C. Manipuler les éléments d'une page avec DOM
Accéder aux éléments : les sélecteurs
Trouver un élément ou un groupe d'éléments avec getElementById, querySelector et querySelectorAll, et parcourir les résultats.
1Situer
Sur la page des horaires de bus d'Agadir, on veut mettre en évidence les lignes qui desservent l'aéroport, afficher le nombre de départs, et changer le titre. Avant de modifier quoi que ce soit, il faut trouver les bons éléments. Les sélecteurs CSS du module 04 servent à nouveau : ici, c'est JavaScript qui les utilise.
2Comprendre
Trouver des éléments avec les sélecteurs
La page des horaires : un titre et quatre lignes de bus. Deux d'entre elles vont à l'aéroport.
1 / 6
Les méthodes d’accès
Méthode
Renvoie
document.getElementById('titre')
l’élément, ou null
document.querySelector('sélecteur CSS')
le premier élément, ou null
document.querySelectorAll('sélecteur CSS')
tous les éléments (NodeList, éventuellement vide)
document.getElementsByClassName('ligne')
collection vivante (se met à jour seule)
document.getElementsByTagName('tr')
idem, par balise
querySelector et querySelectorAll acceptent tous les sélecteurs CSS : c’est ce qu’on utilise le plus aujourd’hui.
const lignes =document.querySelectorAll('.ligne');
console.log(lignes.length); // 4
lignes.forEach((tr) => tr.classList.add('surligne')); // pour chacunconst tableau = [...lignes]; // pour map, filter...
Chercher à l’intérieur d’un élément
querySelector existe aussi sur les éléments : table.querySelectorAll('td') ne cherche que dans ce tableau.
Penser au null
Si le sélecteur ne trouve rien, querySelector renvoie null et la ligne suivante plante (Cannot read properties of null). Vérifiez le sélecteur et que le script s’exécute après le HTML.
Exemple simple
Appeler quelqu'un dans une salle
On peut appeler une personne par son numéro de CIN (unique) : getElementById. Ou demander « toutes les personnes en rouge » : querySelectorAll('.rouge').
document.getElementById('titre'); // un seul : l'id est uniquedocument.querySelector('.ligne'); // le premier qui corresponddocument.querySelectorAll('.ligne'); // tous
Exemple simple
Les mêmes sélecteurs qu'en CSS
Tout ce qui marche dans une feuille de style marche dans querySelector : balise, .classe, #id, descendant, attribut, pseudo-classe.
○Changez le titre en « Horaires des bus d'Agadir »
○Avec querySelectorAll('.ligne'), affichez dans #info « 4 départs »
○Ajoutez la classe surligne aux lignes [data-dest="aeroport"] (forEach)
○Avec querySelector, affichez dans la console l'heure du dernier départ (09:00)
4Pratiquer
Exercice 1 · Le bon sélecteur
Écrivez l'instruction qui récupère : (1) l'élément d'id menu ; (2) tous les boutons ; (3) le premier lien du footer ; (4) toutes les cases cochées.
Voir le corrigé
document.getElementById('menu'); // ou querySelector('#menu')document.querySelectorAll('button');
document.querySelector('footer a');
document.querySelectorAll('input[type="checkbox"]:checked');
Exercice 2 · NodeList et tableau
querySelectorAll renvoie une NodeList. Comment utiliser map ou filter dessus ?
Voir le corrigé
const lignes = [...document.querySelectorAll('.ligne')]; // ou Array.from(...)const heures = lignes.map((tr) => tr.lastElementChild.textContent);
// forEach, lui, fonctionne directement sur une NodeList.
Exercice 3 · Chercher dans un élément
Comment chercher seulement les cellules du premier <tr> ?
Voir le corrigé
const premier =document.querySelector('tr');
const cellules = premier.querySelectorAll('td');
// querySelector existe aussi sur chaque élément : la recherche se limite à ses descendants.