Manipuler le DOM
Le DOM (Document Object Model), c'est la page HTML vue par JavaScript : un arbre d'objets qu'on peut lire et modifier. C'est là que HTML, CSS et JS se rejoignent.
La page est un arbre
document
└── html
├── head
└── body
├── h1 "Mon titre"
└── ul
├── li "Un"
└── li "Deux"
Chaque balise devient un élément que JS peut attraper, puis modifier.
Sélectionner des éléments
querySelector utilise les mêmes sélecteurs qu'en CSS !
Modifier des éléments
Bonne pratique Plutôt que
element.style, prépare une classe en CSS et ajoute-la avec classList. Le style reste dans le CSS, le comportement dans le JS.Un utilisateur tape <b>Salut</b> dans un champ. Pour l'afficher tel quel, sans risque, on utilise…
innerHTMLtextContent
textContent affiche le texte brut. innerHTML interpréterait les balises — dangereux avec du texte venant d'un utilisateur (faille XSS).
Créer et supprimer des éléments
À toi de jouer
Le relooking
Ne modifie pas le HTML ! En JavaScript uniquement :
- Change le texte du
h1enBienvenue ! - Ajoute la classe
promoau paragraphe#offre. - Change l'image :
src=../assets/img/chat.svg.
Indice
Commence toujours par attraper l’élément :document.querySelector("h1").Indice
Texte →.textContent = … ; classe → .classList.add("promo") ; image → .src = ….Indice
Les trois lignes commencent ainsi :document.querySelector("h1").textContent = ...;
document.querySelector("#offre").classList.add(...);
document.querySelector("img").src = ...;Le menu généré
Pour chaque plat du tableau, crée un li dans #menu.
Indice
Récupère d’abord la liste :const menu = document.querySelector("#menu");Indice
Parcours le tableau avecfor (const plat of plats) { … } : un tour de boucle par plat.Indice
Dans la boucle :const li = document.createElement("li");
li.textContent = plat;
menu.append(li);Le catalogue
Pour chaque produit, crée dans #catalogue une div de classe carte qui contient un h3 (le nom) et un p (le prix, ex. 49 €).
Indice
Même principe que l’exercice précédent, sauf que chaque carte contient elle-même deux éléments.Indice
Pour chaque produit, crée 3 éléments : ladiv (avec classList.add("carte")), le h3 et le p.Indice
Assemble de l’intérieur vers l’extérieur :carte.append(titre, prix); puis catalogue.append(carte);. Le prix : `${produit.prix} €`.À retenir
document.querySelector("sélecteur CSS")/querySelectorAll..textContent,.classList.add(),.src,.href,.style.- Créer :
createElement→ remplir →append. Supprimer :.remove().