Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0
Pour pouvoir commencer à dynamiser le HTML nous allons avoir besoin d’interagir avec le DOM de la page. Pour pouvoir sélectionner du HTML, le modifier, écouter les évènements.
Avant tout nous allons avoir besoin de sélectionner des éléments dans le DOM, pour pouvoir les modifier, en récupérer les informations ou écouter leurs évènements.
Pour récupérer un élément du DOM en utilisant son id
:
<section id="yep">
</section>
let yep = document.getElementById("yep");
Pour récupérer tous les éléments qui ont une même class
:
<article class="product">
</article>
<article class="product">
</article>
let productList = document.getElementsByClassName("product");
Pour utiliser directement un sélecteur CSS et récupérer le premier élément correspondant
<ul>
<li>
Salade
</li>
<li>
Tomate
</li>
<li>
Oignon
</li>
</ul>
let tomate = document.querySelector("ul li:nth-of-type(2)");
<ul>
<li>
Salade
</li>
<li>
Tomate
</li>
<li>
Oignon
</li>
</ul>
let ingredients = document.querySelectorAll("ul li:not(:first-of-type)");
// [Tomate, Oignon]
Pour modifier directement le style d’un élément :
let box = document.getElementById("box");
box.style.backgroundColor = "red";
L’attribut classList permet de modifier la liste des classes présentes sur un élément :
let box = document.getElementById("box");
box.classList.add("open"); // box aura la classe open
box.classList.remove("open"); // box n'aura plus la classe open
box.classList.toggle("open"); // si la classe est là ça l'enlève, si elle n'y est pas ça la rajoute
L’attribut id permet de lire ou modifier l’id d’un élément :
let box = document.querySelector("ul li:first-of-type");
let id = box.id; // box
box.id = "box1"; // box1
Vous pouvez utiliser getAttribute()
pour récupérer un attribut.
Vous pouvez utiliser setAttribute()
pour modifier un attribut.
let box = document.getElementById("box");
box.setAttribute("titi", "toto");
let titi = box.getAttribute("titi"); // toto
<section id="box" titi="toto">
</section>
Pour créer un nouvel élément HTML :
let ul = document.createElement("ul");
let li = document.createElement("li");
Pour ajouter un élément dans un autre élément (à la fin):
<ul id="list">
</ul>
let ul = document.getElementById("list");
let li = document.createElement("li");
ul.appendChild(li);
Pour ajouter du contenu texte :
let li = document.createElement("li");
let txt = document.createTextNode("Salade");
li.appendChild(txt);
Pour insérer un élément avant un autre
<article id="post">
<p>
</p>
<article>
let p = document.querySelector("#post p");
let header = document.createElement("header");
p.insertBefore(header);
Ajouter un listener sur un event, ça veut dire surveiller si un évènement se produit et si c’est le cas déclencher une action précise.
<button id="btn">Click Me!</button>
Pour lui désigner l’action qu’il va devoir faire, on utilise une fonction qui n’a pas de nom. On appelle ça une fonction anonyme.
let btn = document.getElementById("btn");
btn.addEventListener("click", function(event){
alert("On a cliqué sur le bouton!");
});
Mais on peut aussi choisir d’attacher des évènements à de multiples éléments, dans ce cas si on a besoin de pouvoir cibler précisément l’élément qui a reçu l’évènement, on va utiliser event.target
:
let buttons = document.querySelectorAll("button");
for(let i = 0; i < buttons.length; i++)
{
buttons[i].addEventListener('click', function(event){
let button = event.target;
console.log(button);
})
}
Si vous avez besoin d’annuler le comportement par défaut d’un élément (par exemple éviter à un lien de vous faire changer de page avant d’avoir lancé une animation) on utilise event.preventDefault()
:
let links = document.querySelectorAll("a");
for(let i = 0; i < links.length; i++)
{
links[i].addEventListener('click', function(event){
event.preventDefault();
window.alert("Vous avez des modifications non sauvegardées !");
})
}
L’event DOMContentLoaded
de la window
vous indique que le contenu de votre page a bien été chargé, par prudence, placez tout le reste de votre code dedans :
window.addEventListener("DOMContentLoaded", function(){
// tout le reste de mon script
});
L’event click
vous signale que l’utilisateur a cliqué sur l’élément.
On peut également capter des évenements du clavier :
document.addEventListener("keydown", function(event){
console.log(event.code); // affichera le nom de la touche appuyée
});
Les évenements de la souris que l’on peut capter :
Lorsqu’un formulaire a été soumis (clic sur un <input type="submit">
ou <button type="submit">
contenu dans la balise <form>
).
let form = document.getElementById("myFormId");
form.addEventListener('submit', function(event){
event.preventDefault(); // j'empeche le rechargement de la page
// je fais mes trucs
});
Lors que la valeur d’un controle de formulaire (input, select, textearea) change :
let input = document.getElementById("myInputId");
input.addEventListener('change', function(event){
console.log(input.value); // ici j'affiche la valeur du champ
});