JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 7 · Application directe du cours
Un tableau construit par le script
Le DOM : lire et modifier la page · niveau 2
Énoncé
À partir d'un tableau d'objets { titre, auteur, prix }, construire dans l'élément <div id="zone"> un tableau HTML accessible : une ligne d'en-tête (cellules <th scope="col">) dans un <thead>, une ligne par livre dans un <tbody>, prix au format français et alignés à droite. On pourra utiliser les méthodes createTHead, createTBody et insertRow des tableaux.
Corrigé
const livres = [
{ titre: "Programmation Java", auteur: "I. Alame", prix: 32 },
{ titre: "Analyse MPSI", auteur: "J.-M. Monier", prix: 45 },
{ titre: "L’Étranger", auteur: "A. Camus", prix: 7.9 },
];
const euros = new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR" });
function cellule(balise, texte) {
const c = document.createElement(balise);
c.textContent = texte;
return c;
}
const table = document.createElement("table");
const entete = table.createTHead().insertRow();
for (const nom of ["Titre", "Auteur", "Prix"]) {
const th = cellule("th", nom);
th.scope = "col";
entete.append(th);
}
const corps = table.createTBody();
for (const { titre, auteur, prix } of livres) {
const ligne = corps.insertRow();
const prixCellule = cellule("td", euros.format(prix));
prixCellule.className = "prix";
ligne.append(cellule("td", titre), cellule("td", auteur), prixCellule);
}
document.querySelector("#zone").append(table);
console.log(table.rows.length, table.tBodies[0].rows.length);
4 3

La petite fonction cellule évite de répéter createElement et textContent. Le tableau est construit entièrement hors de la page, puis inséré en une fois ; table.rows compte la ligne d'en-tête et les trois lignes du corps.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.