
window est l'objet JS racine
window.innerHeight // hauteur de la fenetre
window.innerWidth // largeur de la fenetre
window.open() // ouvre une nouvelle fenetre (onglet)
window.close() // ferme la fenetre active
document est le point d'entrée de l'API DOM
<html>
<head>
<title>My title</title>
</head>
<body>
<a href="page.html">My link</a>
<h1>My header</h1>
</body>
</html>
<html>/<body> si manquantsdocumentdocument.title : titre de la pagedocument.body : élément <body>document.head : élément <head>childNodes
for (let child of document.body.childNodes) {
console.log(child);
}
où children si on ne veut que les nœuds fils de type éléments HTML (sans les textes, etc.)
let tree = "DOM Tree :
";
for (let child of document.body.children) {
tree += "> " + child.nodeName + "
";
console.log(child);
for (let secondChild of child.children) {
tree += "> >" + secondChild.nodeName + "
";
for (let thirdChild of secondChild.children) {
tree += "> > >" + thirdChild.nodeName + "
";
}
}
}
tree += "
"
document.getElementById("tree").innerHTML = tree;
Element pour accéder uniquement aux éléments HTML
getElementById(id) : retourne l'élément avec l'attribut id donné
<div id="elem">
<div id="elem-content">Elément</div>
</div>
<script>
let elem = document.getElementById('elem'); // facultatif
elem.style.background = 'red';
</script>
id doit être unique, sinon le comportement n'est pas prévisibleid autorisent des accès directs, sans utiliser la fonction de rechercheclass ou de name :
document.getElementsByTagName("p"); // par le nom de balise
document.getElementsByClassName("info"); // par une classe
document.getElementsByName("login"); // par l'attribut de balise 'name'
getElementById, ces méthodes peuvent être appelées à partir d’un élément du DOMquerySelectorAll et querySelector
<ul>
<li>Le</li>
<li>test</li>
</ul>
<ul>
<li>a</li>
<li>réussi</li>
</ul>
<script>
let elements = document.querySelectorAll("ul > li:last-child");
for (let elem of elements) {
console.log(elem.innerHTML); // "test", "réussi"
}
</script>
<a> ont tous une propriété hrefnodeName : nom du nœud (balise pour les éléments)nodeType : type du nœud (élément, texte, commentaire, etc.)innerHTML : contenu HTML du nœud (pour les éléments)createElement(), createTextNode()
let div = document.createElement("div");
div.className = "alert";
div.innerHTML = "Ceci est un message important";
Le nœud est créé mais pas (encore) ajouté au DOM
append(), prepend(), before(), after(), replaceWith()
document.body.append(div);
div.after("Mais pas ceci"); // on peut insérer du texte à la place d'un nœud
remove()insertBefore(), insertAfter(), replaceChild(), removeChild(), appendChild()style qui correspond à l’attribut HTML styleclassName
<main class="home">...</main>
<script>
let main = document.querySelector("main");
console.log(main.className); // "home"
</script>
classListadd, remove
let main = document.querySelector("main");
main.classList.add("active"); // ajoute la classe 'active'
main.classList.remove("home"); // supprime la classe 'home'
main.classList.toggle("dark-mode"); // ajoute ou supprime 'dark-mode'
contains() pour vérifier la présence d'une classe<button> correspondant capte l'événement "click"on<event> où <event> est à remplacer par un type d’événement :
<script>
function sayHi() {
alert("Hi!");
}
</script>
<input type="button" onclick="sayHi()" value="Say Hi!">
<!-- ou -->
<input type="button" onclick="alert('Hi!')" value="Say Hi!">
<input id="elem" type="button" value="Say Hi!">
<script>
let elem = document.getElementById("elem");
elem.onclick = function() {
alert("Hi!");
};
</script>
addEventListener() (et removeEventListener())
function handler() {
alert("Hi!");
}
elem.addEventListener("click", handler);
elem.removeEventListener("click", handler);
DOMContentLoaded)eventevent qui encapsule des informations sur l’événement
function handler(event) {
// affiche le type d'événement, l'élément HTML et les coordonnées du 'clic'
alert(event.type + " at " + event.currentTarget);
alert("Coordinates: " + event.clientX + ":" + event.clientY);
}
elem.addEventListener("click", handler);
event dépendent de la nature de l'événementevent.type donne le nom de l’événement (e.g. "click")eventeventtype : type d'événement (e.g. "click")target : nœud du DOM qui a capturé/déclenché l'événementcurrentTarget : nœud du DOM auquel le gestionnaire est attachéclientX, clientY : coordonnées de la souris lors d'un clickey : touche du clavier pressée lors d'un événement clavierbutton : bouton de la souris pressé lors d'un événement de souris
<div id="div-container" class="element">
<span id="span-container" class="element">
<p id="paragraph" class="element">
Event propagation
</p>
</span>
</div>
element.addEventListener('click', handler, true); // phase de capture
element.addEventListener('click', handler, false); // phase de bubbling (par défaut)
stopPropagation() sur l’objet événementstopImmediatePropagation() pour stopper tous les gestionnaires d’événementsstopPropagation() arrêtera la propagation, mais pas l'exécution des gestionnaires sur ce noeudstopImmediatePropagation(): pour stopper la propagation d’un événement dans tous les gestionnaires