From f42eb51b41a94c194f910127bbe7b3a3b44c1251 Mon Sep 17 00:00:00 2001 From: matthieureynier Date: Fri, 19 Jun 2026 16:24:05 +0200 Subject: [PATCH] Tuto JS niveau 4 contact: createElement/append, fetch+async/await+JSON, setInterval, evenements clavier Co-Authored-By: Claude Opus 4.8 (1M context) --- PROCHAINE_ETAPE_contact_3.md | 239 +++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 PROCHAINE_ETAPE_contact_3.md diff --git a/PROCHAINE_ETAPE_contact_3.md b/PROCHAINE_ETAPE_contact_3.md new file mode 100644 index 0000000..33d2ec2 --- /dev/null +++ b/PROCHAINE_ETAPE_contact_3.md @@ -0,0 +1,239 @@ +# 🚀 Niveau 4 — DOM propre, donnĂ©es distantes & temps rĂ©el + +Salut MĂ©lissa ! 👋 + +Suite logique de ce que tu sais dĂ©jĂ  faire (tableaux, boucles, `localStorage`, `classList`, Ă©vĂ©nements
). Quatre modules, du plus simple au plus costaud. Comme d'habitude : un exo Ă  la fois, et **✅ teste** avant de passer au suivant. + +| Module | Notion nouvelle | Exos | +|---|---|---| +| **A. Construire le DOM proprement** | `createElement` / `append` (au lieu de `innerHTML`) | 1 → 2 | +| **B. Aller chercher des donnĂ©es ailleurs** | `fetch`, `async`/`await`, JSON | 3 → 5 | +| **C. Le temps rĂ©el** | `setInterval` | 6 → 7 | +| **D. Le clavier** | Ă©vĂ©nements clavier (`keydown`, `event.key`) | 8 | + +--- + +# đŸ§± Module A — Construire le HTML sans `innerHTML` + +Pour ton tableau d'Ă©quipe, tu utilises `corps.innerHTML = lignes`. Ça marche trĂšs bien pour **tes** donnĂ©es. Mais `innerHTML` a deux limites : +- si tu y mets du texte tapĂ© par un **inconnu**, il peut injecter du code (faille de sĂ©curitĂ© dite *XSS*) ; +- ça remplace **tout** d'un coup, difficile de modifier une seule ligne ensuite. + +La mĂ©thode « propre » consiste Ă  fabriquer chaque Ă©lĂ©ment **un par un**. + +## đŸ§© La notion : `createElement` + `textContent` + `append` + +```js +const ligne = document.createElement("tr"); // on crĂ©e une balise (vide, pas encore dans la page) + +const caseNom = document.createElement("td"); +caseNom.textContent = "MĂ©lissa"; // textContent = du texte pur, jamais interprĂ©tĂ© comme du HTML + +ligne.append(caseNom); // on range la dans la +``` + +> 🔎 `createElement` fabrique l'Ă©lĂ©ment **en mĂ©moire** ; il n'apparaĂźt Ă  l'Ă©cran qu'une fois **rattachĂ©** Ă  la page avec `append`. `textContent` (et non `innerHTML`) garantit que le contenu reste du **texte**, mĂȘme si quelqu'un tape `