Aller au contenu principal

Cours 15 - Classes et attributs

🔖 Classes

Les éléments HTML possèdent parfois une ou plusieurs classes :

<div class="spongebob"> ... </div>
<div class="spongebob patrick"> ... </div>

(Lorsqu'un élément HTML possède plusieurs classes, elles sont séparées par des espaces)

Les classes permettent d'appliquer des styles à plusieurs éléments :

Classes

✅ Ajouter une classe

Syntaxe :

document.querySelector(".classe").classList.add("nouvelle_classe");
Classes

❌ Retirer une classe

Syntaxe :

document.querySelector(".classe").classList.remove("classe_a_retirer");
Classes

🔁 Basculer la présence d'une classe

💡 Si la classe est présente, la retire. Si elle est absente, l'ajoute.

Syntaxe :

document.querySelector(".classe").classList.toggle("classe_a_basculer");
Classes

🔍 Vérifier si un élément possède une classe

Syntaxe :

document.querySelector(".classe").classList.contains("classe_a_verifier");

💡 Cette ligne de code va retourner true si la classe est présente et false sinon.

Classes

Exemple dans une fonction

<div class="texte sobre">Ton thé t'a-t-il ôté ta toux ?</div>

Si l’élément .texte possède la classe sobre, son texte devient "Je possède la classe sobre 😏". Sinon, son texte devient "Je ne possède pas la classe sobre 😭".

function verifierClasse(){

if(document.querySelector(".texte").classList.contains("sobre") == true){

document.querySelector(".texte").textContent = "Je possède la classe sobre 😏";

}
else{

document.querySelector(".texte").textContent = "Je ne possède pas la classe sobre 😭";

}

}
attention

⛔ Notez que si plusieurs éléments possèdent la même classe, alors document.querySelector(...) va seulement réussir à accéder au premier élément avec cette classe dans le code HTML :

Classes

⛔ De plus, notez que si on retire toutes les classes d'un élément, il ne sera plus possible de le manipuler facilement à l'aide de dcoument.querySelector(...) :

Classes

📬 Attributs

Les éléments HTML possèdent parfois un ou plusieurs attributs. Ils sont situés dans la balise ouvrante.

Attributs

✅ Ajouter / modifier un attribut

Syntaxe :

document.querySelector(".classe").nomAttribut = "valeur";
Attributs
info

Notez que si l'attribut avait déjà une valeur, elle sera remplacée :

Attributs

❌ Retirer un attribut

Syntaxe :

document.querySelector(".classe").nomAttribut = "";
Attributs

🤏 Obtenir la valeur d'un attribut

Exemple :

Élément HTML
// Cette variable contient "Bébé requin"
let altBabyShark = document.querySelector(".babyShark").alt;

Autre exemple :

if(document.querySelector(".babyShark").alt == "Bébé requin"){

console.log("Le texte alternatif est valide ! 👶🦈");

}
else{

document.querySelector(".babyShark").alt = "Bébé requin";
console.log("Le texte alternatif a été corrigé.");

}

📜 Récapitulatif (DOM)

Voici un récapitulatif de tout ce qu'on peut faire avec document.querySelector(...) :

  • Manipuler le contenu textuel : .textContent = "..."
  • Manipuler les styles : .style.propriété = "valeur"
  • Ajouter un écouteur d'événements : .addEventListener("type", fonction) 
  • Ajouter une classe : .classList.add("maClasse")
  • Retirer une classe : .classList.remove("maClasse")
  • Basculer une classe : .classList.toggle("maClasse")
  • Vérifier une classe : .classList.contains("maClasse")
  • Manipuler les attributs : .attribut = "valeur"

N'oubliez pas que tout comme le contenu textuel et les styles, currentTarget peut être utiliser pour manipuler les classes et les attributs d'un élément HTML avec lequel on vient de générer un événement :

  • Ajouter une classe : event.currentTarget.classList.add("maClasse")
  • Retirer une classe : event.currentTarget.classList.remove("maClasse")
  • Basculer une classe : event.currentTarget.classList.toggle("maClasse")
  • Vérifier une classe : event.currentTarget.classList.contains("maClasse")
  • Manipuler les attributs : event.currentTarget.attribut = "valeur"

📦 Stocker un élément HTML dans une variable

Disons qu'on doit manipuler plusieurs propriétés d'un élément HTML... réécrire document.querySelector(...) sans arrêt peut être épuisant ... :

DOM avec répétition

💡 La solution : ranger un élément HTML dans une variable !

DOM sans répétition

N'hésitez pas à utiliser cette astuce avec n'importe quel élément HTML si vous prévoyez modifier plusieurs de ses propriétés.

danger

⛔ Attention ! Il n'est pas possible d'utiliser cette astuce directement dans une variable globale !

Ceci ne fonctionnera pas :

let gElementMario = document.querySelector(".mario");

✅ Cela dit, on peut y arriver si on remplir la variable globale dans init() :

// Vide initialement :
let gElementMario;

function init(){

// Mais « instantanément » remplie avec l'élément .mario dans init() :
gElementMario = document.querySelector(".mario");

}

Pourquoi la première méthode ne fonctionne pas ?

En gros, c'est parce que la page Web n'a pas terminé de charger quand les variables globales sont créées. (Alors que la fonction init(), elle, est seulement exécutée une fois que la page Web a terminé de charger.) Quand la page n'est pas chargée, l'élément .mario n'existe pas encore.