Recherche…


Ajouter une classe

Les navigateurs modernes fournissent un objet classList pour faciliter la manipulation de l'attribut de classe de l'élément. Les anciens navigateurs nécessitent une manipulation directe de la propriété className de l'élément.

DOM W3C 4

Une méthode simple pour ajouter une classe à un élément consiste à l'ajouter à la fin de la propriété className . Cela n'empêche pas les noms de classes en double, et les espaces doivent être inclus entre les noms de classes.

document.getElementById("link1").className += " foo";
document.getElementById("link2").className += " foo bar";

Pour plusieurs éléments, vous devrez ajouter les noms de classe à l'intérieur d'une boucle

var els = document.getElementsByClassName("foo"),
  indx = els.length;
while (indx--) {
  els[indx].className += " bar baz";
}
DOM W3C 4

Un nom de classe unique peut être ajouté sous forme de chaîne. Pour ajouter plusieurs noms de classe, utilisez l’opérateur de propagation de ES6:

document.querySelector("#link1").classList.add("foo");
document.querySelector("#link2").classList.add(...['foo', 'bar']);

Pour plusieurs éléments, vous devrez ajouter les noms de classe à l'intérieur d'une boucle

document.querySelectorAll(".foo").forEach(el => {
  el.classList.add(...['bar', 'baz']);
});

Supprimer une classe

Les navigateurs modernes fournissent un objet classList pour faciliter la manipulation de l'attribut de classe de l'élément. Les anciens navigateurs nécessitent une manipulation directe de la propriété className de l'élément.

* Les noms de classes de notes ne sont pas stockés dans la propriété de l'élément dans un ordre particulier

DOM W3C 4

La suppression d'une classe d'un élément nécessite un peu de manipulation de la propriété className .

var toRemove = "bar",
  el = document.getElementById("link1");
el.className = el.className.replace(new RegExp("\\b" + toRemove + "\\b", "g"), "").trim();

La suppression de plusieurs noms de classe nécessiterait une boucle. Les exemples restants utiliseront une fonction pour isoler le travail

function removeClass(el, name) {
  name = name.split(/\s+/);
  var index = name.length,
    classes = el.className;
  while (index--) {
    classes = classes.replace(new RegExp("\\b" + name[index] + "\\b", "g"), "").trim();
  }
  el.className = classes;
}
var el = document.getElementById("link1");
removeClass(el, "bar baz");

Plusieurs éléments avec plusieurs noms de classe à supprimer nécessiteraient deux boucles

function removeClass(els, name) {
  name = name.split(/\s+/);
  var regex, len,
    index = name.length;
  while (index--) {
    regex = new RegExp("\\b" + name[index] + "\\b", "g");
    len = els.length;
    while (len--) {
      els[len].className = els[len].className.replace(regex, "").trim();
    }
  }
}
var els = document.getElementsByTagName("a");
removeClass(els, "bar baz");
DOM W3C 4

Un nom de classe unique peut être supprimé sous forme de chaîne. Pour supprimer plusieurs noms de classes, utilisez l’opérateur de diffusion de ES6:

document.querySelector("#link1").classList.remove("foo");
document.querySelector("#link2").classList.remove(...['foo', 'bar']);

Pour plusieurs éléments, vous devrez supprimer les noms de classe dans une boucle

document.querySelectorAll(".foo").forEach(el => {
  el.classList.remove(...['bar', 'baz']);
});

Test pour une classe

Les navigateurs modernes fournissent un objet classList pour faciliter la manipulation de l'attribut de classe de l'élément. Les anciens navigateurs nécessitent une manipulation directe de la propriété className de l'élément.

* Les noms de classes de notes ne sont pas stockés dans la propriété de l'élément dans un ordre particulier

DOM W3C 4

Tester si un élément contient une classe nécessite un peu de manipulation de la propriété className . Cet exemple utilise une méthode de tableau pour tester la classe.

function hasClass(el, name) {
  var classes = (el && el.className || "").split(/\s+/);
  return classes.indexOf(name) > -1;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));

Le test de plusieurs noms de classe nécessiterait une boucle.

function hasClass(el, name) {
  name = name.split(/[\s.]+/);
  var hasClass = true,
    classes = (el && el.className || "").split(/\s+/),
    index = name.length;
  while (index--) {
    hasClass = hasClass && classes.indexOf(name[index]) > -1;
  }
  return hasClass;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));

Au lieu d'utiliser .indexOf() , vous pouvez également envisager d'utiliser une expression régulière.

function hasClass(el, name) {
  return new RegExp("\\b" + name+ "\\b").test(el.className);
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
DOM W3C 4

Le test d'un nom de classe unique s'effectue comme suit:

var hasClass = document.querySelector("#link1").classList.contains("foo");

Pour plusieurs noms de classe, il est plus facile d'utiliser des matches . Notez l'utilisation du sélecteur de classe; Le sélecteur peut être n'importe quel sélecteur de chaîne valide (id, attribut, pseudo-classes, etc.).

var hasClass = document.querySelector("#link1").matches('.foo.bar');
var hasClass = document.querySelector("#link2").matches('a.bar[href]');


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow