Skip to content

JavaScript et DOM ​

Utilisation du JavaScript dans une page web ​

Il y a plusieurs façons d'inclure du JavaScript dans une page web :

  1. Directement dans la balise <script>: Vous pouvez écrire du code JavaScript directement à l'intérieur d'une balise <script> dans votre fichier HTML. Voici comment faire :
index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple de JavaScript</title>
    </head>
    <body>
        <h1>Bonjour le monde!</h1>
        
        <script>
            console.log("Bonjour depuis JavaScript!");
        </script>
    </body>
</html>

Attention ⚠

La balise <script> doit toujours ĂȘtre placĂ©e avant la fermeture de la balise </body> pour s'assurer que le DOM est complĂštement chargĂ© avant l'exĂ©cution du script.

  1. En liant un fichier JavaScript externe : Il est possible et souvent préférable de séparer le code JavaScript dans un fichier externe. Vous pouvez créer un fichier .js (par exemple, script.js) et le lier à votre fichier HTML comme suit :
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple de JavaScript Externe</title>
    </head>
    <body>
        <h1>Bonjour le monde!</h1>
        <script src="script.js"></script>
    </body>
</html>
javascript
console.log("Bonjour depuis le fichier JavaScript externe!");

Bien évidemment, il est possible de spécifier plusieurs fichiers JavaScript externes en utilisant plusieurs balises <script>. Par exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple de JavaScript Externe</title>
    </head>
    <body>
        <h1>Bonjour le monde!</h1>
        <script src="script1.js"></script>
        <script src="script2.js"></script>
    </body>
</html>

Information ❗

Les scripts sont exĂ©cutĂ©s dans l'ordre oĂč ils sont inclus dans le fichier HTML.

Il est également possible d'utiliser la console JavaScript dans la balise <script> pour tester rapidement des morceaux de code.

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple de Console JavaScript</title>
    </head>
    <body>
        <h1>Bonjour le monde!</h1>      
        <script>
            console.log("Ceci est un message dans la console JavaScript.");
        </script>
    </body>
</html>

Introduction au DOM (Document Object Model) ​

Qu'est-ce que le DOM? ​

Le DOM (Document Object Model) est une interface de programmation pour les documents HTML et XML. En gros, il reprĂ©sente la structure d'une page web sous forme d'un arbre hiĂ©rarchique, oĂč chaque Ă©lĂ©ment HTML est un nƓud dans cet arbre. Le DOM permet aux langages de programmation, comme JavaScript, d'accĂ©der et de manipuler le contenu, la structure et le style des pages web de maniĂšre dynamique.

Quelques lectures supplémentaires sur le DOM :

Voici un exemple visuel de la structure du DOM pour une page HTML :[1]

first page meme

Tous les nƓuds sont des enfants du nƓud racine document. Chaque Ă©lĂ©ment HTML (comme <html>, <head>, <body>, etc.) est reprĂ©sentĂ© comme un nƓud dans cet arbre.

Il sera bien Ă©videmment possible de manipuler le DOM avec JavaScript pour modifier le contenu, ajouter ou supprimer des Ă©lĂ©ments, changer les styles, etc. đŸ”„

Vous allez voir, ça va ĂȘtre malade ! 😉

Manipulation du DOM avec JavaScript ​

Plusieurs méthodes sont disponibles pour accéder et manipuler les éléments du DOM avec JavaScript. Durant ce cours et le prochain, nous allons en explorer quelques-unes!

Lecture intéressante sur les méthodes de manipulation du DOM :

Dans une page web, avec le DOM, l'objet global document représente la page web entiÚre. Vous pouvez utiliser cet objet pour accéder aux éléments HTML et les manipuler.

getElementById ​

La méthode getElementById permet de sélectionner un élément HTML en utilisant son attribut id. Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple getElementById</title>
    </head>
    <body>
        <h1 id="monTitre">Bonjour le monde!</h1>
        <script>
            let titre = document.getElementById("monTitre");
            titre.innerHTML = "Texte modifié!";
        </script>
    </body>
</html>

Information ❗

innerHTML est une propriété qui permet de modifier le contenu HTML d'un élément. Le contenu est ce qui est entre les balises ouvrantes et fermantes.

getElementsByClassName ​

La mĂ©thode getElementsByClassName permet de sĂ©lectionner tous les Ă©lĂ©ments HTML qui partagent une mĂȘme classe CSS. Le rĂ©sultat est une liste (tableau) d'Ă©lĂ©ments. Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple getElementsByClassName</title>
    </head>
    <body>
        <p class="fruit">Pomme</p>
        <p class="fruit">Banane</p>
        <p class="fruit">Poire</p>
        <script>
            let fruits = document.getElementsByClassName("fruit");
            for (let fruit of fruits) {
                fruit.innerHTML = "Orange";
            }
        </script>
    </body>
</html>

getElementsByTagName ​

La méthode getElementsByTagName permet de sélectionner tous les éléments HTML d'un certain type (balise). Le résultat est une liste (tableau) d'éléments. Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple getElementsByTagName</title>
    </head>
    <body>
        <h1>Titres</h1>
        <h2>Sous-titres</h2>
        <h3>Autres titres</h3>
        <script>
            let titres = document.getElementsByTagName("h2");
            for (let titre of titres) {
                titre.innerHTML = "Titre modifié";
            }
        </script>
    </body>
</html>

querySelector et querySelectorAll ​

Les méthodes querySelector et querySelectorAll permettent de sélectionner des éléments en utilisant des sélecteurs CSS.

querySelector Retourne le premier élément correspondant.

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple querySelector</title>
    </head>
    <body>
        <p class="animal">Chien</p>
        <p class="animal">Chat</p>
        <script>
            let animal = document.querySelector(".animal");
            animal.innerHTML = "Lapin";
        </script>
    </body>
</html>

querySelectorAll Retourne une liste de tous les éléments correspondants.

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple querySelectorAll</title>
    </head>
    <body>
        <p class="animal">Chien</p>
        <p class="animal">Chat</p>
        <script>
            let animaux = document.querySelectorAll(".animal");
            for (let animal of animaux) {
                animal.innerHTML = "Lapin";
            }
        </script>
    </body>
</html>

Truc 💡

Au besoin, n'hésitez pas à vous référer à la documentation suivante : https://www.w3schools.com/css/css_selectors.asp

Exercice - DOM DOM DOM ​

Vous devez utiliser les fonctions du DOM afin de faire afficher la valeur des éléments suivants dans la console du navigateur :

  1. L'élément avec l'id special.
  2. Tous les éléments avec la classe note.
  3. Tous les éléments <li>.
  4. Le premier élément avec la classe highlight.

Utiliser le fichier suivant comme point de départ.

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exercice DOM</title>
    </head>
    <body>
        <h1 id="special">Titre spécial</h1>
        <p class="note">Note 1</p>
        <p class="note">Note 2</p>
        <ul>
            <li>ÉlĂ©ment 1</li>
            <li>ÉlĂ©ment 2</li>
            <li>ÉlĂ©ment 3</li>
        </ul>
        <div class="highlight">Contenu en surbrillance</div>
        <div class="highlight">Autre contenu en surbrillance</div>
    </body>
</html>

EXTRA : Toujours avec une fonction du DOM, modifier le texte de l'élément avec l'id special pour qu'il affiche "Titre modifié!".

Modification des styles CSS ​

À l'aide du DOM, il est possible d'accĂ©der au css avec la propriĂ©tĂ© style. Il peut s'avĂ©rer trĂšs intĂ©ressant de modifier le css de maniĂšre dynamique dans notre site web.

La syntaxe sera la suivante : element.style.proprieteCSS = "valeur".

Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple modification CSS</title>
    </head>
    <body>
        <h1 id="monTitre">Bonjour le monde!</h1>
        <h1 id="monAutreTitre">Bonjour le monde x2!</h1>
        <script>
            let titre = document.getElementById("monTitre");
            titre.style.color = "red";
            titre.style.fontSize = "30px";
        </script>
    </body>
</html>

Ici, il se passe :

  1. On sélectionne l'élément avec l'id monTitre.
  2. On modifie la couleur du texte en rouge avec style.color.
  3. On modifie la taille de la police avec style.fontSize.

L'équivalent en CSS serait :

css
#monTitre {
    color: red;
    font-size: 30px;
}

Truc 💡

Au besoin, n'hésitez pas à vous référer à la documentation suivante : https://www.w3schools.com/js/js_htmldom_css.asp

Modification d'un attribut ​

Il est possible de modifier la valeur d'un attribut HTML en utilisant element.attributeName = "valeur".

Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple modification attribut</title>
    </head>
    <body>
        <img id="monImage" src="image1.jpg" alt="Image 1">
        <script>
            let image = document.getElementById("monImage");
            image.src = "image2.jpg";
        </script>
    </body>
</html>

Ici, on modifie l'attribut src de l'élément <img> pour changer l'image affichée.

Il serait Ă©galement possible de faire la mĂȘme chose avec l'attribut alt pour changer le texte, par exemple.

Cependant, ce ne sont pas toujours les mĂȘmes noms (ex.: pour les classes, on doit travailler avec classList) Exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple modification class</title>
    </head>
    <body>
        <p id="monParagraphe" class="classe1">Texte du paragraphe</p>
        <script>
            let paragraphe = document.getElementById("monParagraphe");
            paragraphe.classList.add("classe2");
            paragraphe.classList.remove("classe1");
        </script>
    </body>
</html>

Ici, on utilise classList ainsi que les méthodes add et remove permet de gérer les classes de maniÚre dynamique.

Truc 💡

classList est trÚs intéressant pour ajouter ou enlever une classe CSS selon une action.

Par exemple, pour cacher une section si l'utilisateur clique sur un bouton.

Ça ressemble beaucoup à l'accordion que vous avez vu avec Bootstrap.

Ajout d'un Ă©lĂ©ment ​

Il est possible d'ajouter des éléments HTML dynamiquement en utilisant les méthodes createElement et appendChild. Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple ajout d'élément</title>
    </head>
    <body>
        <div id="monDiv">
            <p>Paragraphe existant</p>
        </div>
        <script>
            // On crée un nouveau div
            let nouveauDiv = document.createElement("div");
            
            // On lui donne un peu de contenu
            const nouveauContenu = document.createTextNode('Allo tout le monde!');

            // Ajoute le nouveau contenu au div
            nouveauDiv.appendChild(nouveauContenu);
            
            // À partir du div existant, on ajoute le nouveau div
            const divDejaLa = document.getElementById('monDiv');
            document.body.insertBefore(nouveauDiv, divDejaLa);
        </script>
    </body>
</html>

Suppression d'un Ă©lĂ©ment ​

Il est possible de supprimer des éléments HTML dynamiquement en utilisant la méthode removeChild. Voici un exemple :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple suppression d'élément</title>
    </head>
    <body>
        <div id="monDiv">
            <p id="paragrapheASupprimer">Paragraphe Ă  supprimer</p>
        </div>
        <script>
            // On sélectionne le paragraphe à supprimer
            let paragraphe = document.getElementById("paragrapheASupprimer");
            
            // On supprime le paragraphe du div parent
            paragraphe.parentNode.removeChild(paragraphe);
        </script>   
    </body>
</html>

Interaction avec le navigateur ​

Le DOM permet également d'interagir avec le navigateur en utilisant des boßtes de dialogue telles que alert, prompt et confirm. Voici un exemple pour chacune de ces boßtes de dialogue :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple boĂźtes de dialogue</title>
    </head>
    <body>
    <script>
        // BoĂźte d'alerte
        alert("Ceci est une alerte!");

        // BoĂźte de prompt
        let nom = prompt("Quel est votre nom?");
        console.log("Bonjour, " + nom + "!");

        // BoĂźte de confirmation
        let confirmation = confirm("Êtes-vous sĂ»r de vouloir continuer?");
        if (confirmation) {
            console.log("L'utilisateur a confirmé.");
        } else {
            console.log("L'utilisateur a annulé.");
        }
    </script>
    </body>
</html>

Manipulation du temps ​

Le DOM fournit également des fonctions pour gérer le temps, telles que setTimeout et setInterval. Voici un exemple pour chacune de ces fonctions :

index.html
html
<!DOCTYPE html>
<html>
    <head>
        <title>Exemple manipulation du temps</title>
    </head>
    <body>
    <script>
        // setTimeout : exécute une fonction aprÚs un délai spécifié (en millisecondes)
        setTimeout(function() {
            console.log("Ceci est affiché aprÚs 2 secondes.");
        }, 2000);   
        // setInterval : exécute une fonction à intervalles réguliers (en millisecondes)
        let compteur = 0;
        let intervalId = setInterval(function() {
            compteur++; 
            console.log("Compteur : " + compteur);
            if (compteur >= 5) {
                clearInterval(intervalId); // ArrĂȘte l'intervalle aprĂšs 5 exĂ©cutions
            }   
        }, 1000); // Exécute toutes les secondes
    </script>
    </body>
</html>

Truc 💡

Il existe la fonction clearInterval et clearTimeout pour arrĂȘter les intervalles et les dĂ©lais si nĂ©cessaire.

Exercice rĂ©capitulatif - Manipulation du DOM, css et attributs ​

  1. Créez une page HTML avec les éléments suivants :
    • Un titre <h1> avec l'id monTitre.
    • Trois paragraphes <p> avec la classe note.
    • Une liste non ordonnĂ©e <ul> avec trois Ă©lĂ©ments <li> ReprĂ©sentant diffĂ©rents cours de votre parcours.
    • Un div avec la classe highlight.
    • Il se peut que vous ailler a ajouter d'autres classes ou id pour faire l'exercice.
  2. Créez un fichier JavaScript externe et liez-le à votre page HTML.
  3. Dans votre fichier JavaScript, utilisez les méthodes du DOM pour :
    • Afficher dans la console l'Ă©lĂ©ment avec l'id monTitre.
    • Afficher dans la console tous les Ă©lĂ©ments avec la classe note.
    • Afficher dans la console tous les Ă©lĂ©ments <li>.
    • Afficher dans la console le premier Ă©lĂ©ment avec la classe highlight.
    • Modifiez le texte de l'Ă©lĂ©ment avec l'id monTitre pour qu'il affiche "Cours en technique de l'informatique".
    • Modifiez le style de tous les Ă©lĂ©ments avec la classe note pour qu'ils aient une couleur de texte bleue, une taille de police de 18 pixels et le texte en gras.
    • Ajouter un Ă©lĂ©ment <li> Ă  votre liste avec le nom d'un cours que vous aimeriez suivre Ă  l'avenir.
    • Supprimer un Ă©lĂ©ment <li> qui reprĂ©sente un cours que vous avez dĂ©jĂ  suivi.
    • Afficher avec une alerte l'Ă©lĂ©ment que vous venez de supprimer de votre liste.
    • AprĂšs 10 secondes, vous devez changer le texte de l'Ă©lĂ©ment avec l'id monTitre pour qu'il affiche "Merci d'avoir visitĂ© ma page!".

Rappel - Utilisation de la console du navigateur ​

Dans cette section, il s'agit simplement de faire un petit rappel sur l'utilisation de la console de votre navigateur web.

Afin d'ouvrir la console, f12 est souvent la touche du clavier utilisé et ce peut importe votre navigateur web.

Sur Chrome : https://developers.google.com/web/tools/chrome-devtools

Sur Firefox : https://firefox-source-docs.mozilla.org/devtools-user/

Sur Edge : https://learn.microsoft.com/en-us/microsoft-edge/devtools/overview

Truc 💡

Je ne vous oblige pas de navigateur pour ce cours, vous prenez celui de votre choix. J'utilise personnellement Edge et cela fonctionne trĂšs bien.


  1. Source: https://www.w3schools.com/js/js_htmldom.asp ↩

420-2W1-DM - Développement d'applications web 2