Aller au contenu
M05 · C. Manipuler les éléments d'une page avec DOM

Créer, modifier et supprimer des éléments

Modifier le texte, le HTML, les attributs, les classes et les styles d'un élément, créer de nouveaux éléments et les insérer dans la page, en supprimer, et construire un menu dynamiquement.

1Situer

Un snack de Marrakech met à jour son menu tous les jours. Plutôt que de réécrire le HTML, le menu est rangé dans un tableau JavaScript, et c'est le script qui construit la liste, ajoute le plat du jour en évidence et retire ce qui n'est plus disponible.

2Comprendre

Créer un élément, puis l'insérer dans la page
ul#menu (la page) Tacos poulet Panini thon remove() ✖ en mémoire (invisible) <li></li> const li =   createElement('li'); li.textContent = 'Harira'; menu.append(li); panini.remove();

La liste #menu contient déjà deux plats.

1 / 5

Modifier un élément

InstructionEffet
el.textContent = 'Harira'remplace le texte (sûr)
el.innerHTML = '<b>Harira</b>'remplace le contenu HTML (attention aux saisies des visiteurs)
el.setAttribute('href', '#menu')modifie un attribut
el.getAttribute('href'), el.removeAttribute('disabled')lit, supprime un attribut
img.src = 'harira.jpg', input.value = ''raccourcis pour les attributs courants
el.style.color = 'red'style en ligne (propriétés en camelCase)
el.classList.add('special')ajoute une classe ; aussi remove, toggle, contains

Créer et insérer

const li = document.createElement('li');   // 1. fabriquer
li.textContent = 'Harira';                  // 2. remplir
li.classList.add('special');
menu.append(li);                            // 3. insérer à la fin
MéthodePlace
parent.append(el) / appendChild(el)dernier enfant
parent.prepend(el)premier enfant
el.before(nouveau), el.after(nouveau)avant, après el
parent.insertBefore(nouveau, reference)avant reference

Supprimer et remplacer

li.remove();                       // supprimer
ancien.replaceWith(nouveau);       // remplacer
menu.innerHTML = '';               // vider

Un menu construit en JavaScript

const pages = [['Accueil', '#'], ['Menu', '#menu'], ['Contact', '#contact']];
const nav = document.querySelector('#barre');
for (const [texte, lien] of pages) {
  const a = document.createElement('a');
  a.textContent = texte;
  a.setAttribute('href', lien);
  nav.append(a);
}

Changer le tableau pages suffit pour changer le menu sur tout le site.

Exemple simple

Fabriquer puis accrocher

Pour ajouter un cadre au mur, on le fabrique d'abord (createElement), on y met la photo (textContent), puis on l'accroche au mur (append). Tant qu'il n'est pas accroché, personne ne le voit.

const li = document.createElement('li');
li.textContent = 'Msemen au miel';
document.querySelector('#menu').append(li);
Exemple simple

Changer le costume avec les classes

Plutôt que de changer chaque propriété de style une par une, on prépare un costume en CSS (.special) et on le met ou l'enlève avec classList.

li.classList.add('special');
li.classList.toggle('epuise');

3Manipuler

Le menu vient d'un tableau JavaScript. Construisez la liste avec createElement, puis modifiez-la en suivant les consignes.
Ouvrir dans le lab ↗
Console
  • Avec une boucle, créez un <li> pour chacun des 4 plats (le jus doit être le dernier)
  • Ajoutez la classe special au li « Harira » (le plat du jour)
  • Supprimez le li « Panini thon » avec remove() : le jus passe en 3e position
  • Construisez un menu de navigation : 3 liens <a> créés en JS dans #barre (Accueil, Menu, Contact)
  • Donnez à chaque lien un attribut href avec setAttribute (par exemple « #menu »)

4Pratiquer

Exercice 1 · textContent ou innerHTML ?

Quelle est la différence entre el.textContent = '<b>Promo</b>' et el.innerHTML = '<b>Promo</b>' ? Laquelle est dangereuse avec un texte saisi par un visiteur ?

Voir le corrigé
textContent affiche le texte tel quel : on voit littéralement <b>Promo</b>.
innerHTML interprète le HTML : Promo s'affiche en gras.
Avec un texte saisi par un visiteur, innerHTML est dangereux : il pourrait
injecter du HTML ou du JavaScript (faille XSS). On utilise textContent.

Exercice 2 · Changer le style

Mettez le titre h2 en vert et en majuscules avec la propriété style, puis expliquez pourquoi classList est souvent préférable.

Voir le corrigé
const h2 = document.querySelector('h2');
h2.style.color = 'green';
h2.style.textTransform = 'uppercase';   // propriétés CSS en camelCase
// classList garde la présentation dans le CSS : plus facile à maintenir
// et à modifier sans toucher au JavaScript.

Exercice 3 · Insérer avant

Insérez un <li> « Thé à la menthe » au début de la liste #menu.

Voir le corrigé
const the = document.createElement('li');
the.textContent = 'Thé à la menthe';
menu.prepend(the);
// ou : menu.insertBefore(the, menu.firstElementChild);

5Vérifier

1. Un élément créé avec createElement apparaît-il tout de suite dans la page ?
2. Que fait el.classList.toggle('actif') ?
3. Comment écrit-on la propriété CSS background-color avec el.style ?