Travail personnel
Objectifs
Lors de cette séance, on utilise JavaScript pour modifier une page web, en utilisant l'API du DOM.
Exercice 1 — Expérimenter avec le DOM #
Cet exercice fait partie de ceux qui seront évalués. La page doit être accessible et fonctionnelle à l'URL suivante :
https://dev-LOGIN.users.info.unicaen.fr/TW2-2026/TP03/ex1/dom.html(en remplaçant LOGIN par votre nom de login). Pensez à vérifier la validité W3C de votre page !
D'autre part,
l'élément head doit contenir le code suivant :
<meta name="author" content="LOGINS" />en remplaçant LOGINS par les noms de login des étudiant·e·s qui ont travaillé sur cette page, séparés par des virgules. (Il faut laisser
name="author" tel quel, par contre !) Par exemple, si dupont210 et durand212 ont travaillé ensemble, ils mettent
<meta name="author" content="dupont210,durand212" />
dans le head de leur page. Ça permettra à notre script de savoir qui a travaillé avec qui. Attention, le travail en binôme est réservé aux cas où il n'y a pas assez de machines disponibles.
Il est conseillé de vérifier que l'exercice a été correctement rendu en utilisant l'application evalweb.
Vous avez jusqu'à la fin de la semaine suivante pour terminer l'exercice.
L'archive tp3.zip contient une page web dom.html, un fichier Javascript dom.js et 2 images.
Help! pensez à consulter la page de cours.
Préliminaire : faire fonctionner le script
- Démarrage : le code qui prend l'élément d'identifiant
paragrapheet l'affiche en console est déjà écrit dans le fichierdom.js. Mais ça affichenullau lieu de l'élément<p>.
Pourquoi cela ne marche-t-il pas ? - Déplacer la balise
<script src="dom.js"></script>et la placer en fin debody. Attention, il faut la mettre avant la fermeture</body>sinon votre page ne sera plus valide.
Tester à nouveau. Pourquoi cela marche-t-il maintenant ?
Partie 1 : obtenir des données de l'arbre DOM
Il est important ici de bien comprendre la différence entre querySelector et
querySelectorAll.
Attention chaque fonction doit faire un return de ce qui est demandé,
puis faire un console.log qui appelle la fonction et affiche donc son résultat.
Écrire les fonctions :
getListequi renvoie l'élément d'identifiantliste1getParaqui renvoie le premier paragraphe de la pagegetTexteParaqui renvoie le contenu textuel du premier paragraphegetH2Debutqui renvoie le premier h2 de classedebutgetTexteH2Debutqui renvoie son contenu textuelgetEmphasequi renvoie le premieremcontenu dans unligetTexteEmphasequi renvoie son contenu textuelgetPremierFilsqui renvoie le premier élément fils de la premièrefigure(ce doit être l'élément image)getSourcequi renvoie la valeur de l'attributsrcde l'élément obtenu à la question précédentegetAltqui renvoie la valeur de l'attributaltde l'élément obtenu à la question 8getFilsBodyqui renvoie la liste des éléments fils debodygetTousImportantqui renvoie la liste des éléments de classeimportantgetParaDiv1qui renvoie le nombre de paragraphes dans la divisiondiv1compteParaqui renvoie le nombre de paragraphes dans la pagecompteParaInDivqui renvoie le nombre de paragraphes dans une division- Ajouter un
console.log("------------------------------");.
Partie 2 : modifier un élément de la page
Toutes les modifications doivent être faites via Javascript, interdiction de toucher au code du fichier HTML !
Les fonctions à écrire vont ici agir directement sur la page, elles n'ont donc pas de valeur de retour et il n'y a rien à afficher, les modifications faites doivent se voir sur la page. Pour cela, pensez à appeler la fonction pour qu'elle s'exécute !
Écrire les fonctions :
changeParaqui obtient l'élément d'identifiantparagrapheet le met dans une variable, puis qui va faire les modifications suivantes sur ce paragraphe :- Mettre une largeur de 600px et mettre le texte en rouge et en taille 26px
- Modifier le contenu textuel du paragraphe
- Ajouter un attribut
titleau paragraphe (y mettre le texte de votre choix)
changeImagequi change la source de l'image de la 2e partie (mettre l'imagesouris1968.jpg), et change le texte de l'attributalt(mettre le texte une souris en 1968)changeLegendequi modifie le texte de la légende de l'image de la 2e partiechangeItemqui change le texte du dernier item de la liste à puce de la 2e partiesupprimeParaqui supprime le premier paragraphe de la 2e partiesupprimePremierItemqui supprime le premier item de la liste de la liste à puce de la 2e partie- Ajouter un
console.log("------------------------------");.
Partie 3 : modifier tout un ensemble d'éléments
Rappel de cours : l'utilisation de querySelectorAll renvoie une liste d'éléments (liste éventuellement vide).
Une liste n'étant pas un élément, on ne peut pas utiliser directement les méthodes de la partie précédente.
Il faudra donc parcourir ces listes d'éléments (bouche for) pour agir individuellement sur chaque élément de la liste.
Pour cette partie, les fonctions à écrire vont de nouveau agir directement sur la page, elles n'ont donc pas de valeur de retour et il n'y a rien à afficher, les modifications faites doivent se voir sur la page. Pour cela, pensez à appeler la fonction pour qu'elle s'exécute !
Écrire les fonctions :
ajouteBordurequi met une bordure continue noire de 1px sur tous les élémentsh2de la partie 3changeTousItemsqui mettre tous les items de liste de la partie 3 en texte blanc sur fond noir et leur met une margin de 10px.
Attention si vous n'avez pas de blanc entre les items alors ce n'est pas correctsupprimeExoDomqui supprime les items de liste qui appartiennent à classeexo-domsupprimeGrasqui supprime tous les élémentsstrong(et leur texte) qui sont dans le paragraphe d'identifiantgrasenleveImportantqui, pour tout élément ayant les classesexo-domETimportant, leur enlève la classeimportant(il ne doit alors plus y avoir d'éléments en bleu).
Penser à utiliserclassList
Rappel : le sélecteur CSS pour les éléments ayant les classestotoettitiest.toto.titi- Ajouter un
console.log("------------------------------");.
Partie 4 : ajouter des éléments dans la page
Pour cette partie, les fonctions à écrire vont de nouveau agir directement sur la page, elles n'ont donc pas de valeur de retour et il n'y a rien à afficher, les modifications faites doivent se voir sur la page. Pour cela, pensez à appeler la fonction pour qu'elle s'exécute !
Écrire les fonctions :
ajouteItemqui ajoute un item à la fin de la listelisteEnPlusavec le texte un item en plusajouteTitrequi ajoute un titre de niveau 1 au tout début de la page (en premier fils debody) et lui met le texte un nouveau titreajouteParaqui ajoute un paragraphe avant la listelisteEnPluset lui met le texte nouveau paragrapheajouteArbrequi crée tout le sous-arbre qui correspond au HTML ci-dessous puis l'ajoute à la page après la divisionlafindéjà présente dans la page.<div class="important"> <h3>Une division créée en Javascript</h3> <div>Une division avec <a href="https://google.com">un lien Google</a> qui ne sert à rien</div> </div>dupliqueListequi duplique la liste à puce présente dans la partie 4, ajoute cette copie à la fin de la page (elle doit donc être en-dessous du dernier cadre) et lui ajoute la classenouvelle(elle doit alors être en vert).
Attention, vérifiez bien que la liste à puce initiale n'a pas disparu.