Buscar..


Añadiendo una clase

Los navegadores modernos proporcionan un objeto classList para facilitar la manipulación del atributo de clase del elemento. Los navegadores más antiguos requieren la manipulación directa de la propiedad className del elemento.

W3C DOM 4

Un método simple para agregar una clase a un elemento es agregarlo al final de la propiedad className . Esto no evitará nombres de clase duplicados, y los espacios deben incluirse entre los nombres de clase.

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

Para elementos múltiples, deberá agregar los nombres de clase dentro de un bucle

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

Se puede agregar un solo nombre de clase como una cadena. Para agregar varios nombres de clase, use el operador de propagación de ES6:

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

Para elementos múltiples, deberá agregar los nombres de clase dentro de un bucle

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

Eliminando una clase

Los navegadores modernos proporcionan un objeto classList para facilitar la manipulación del atributo de clase del elemento. Los navegadores más antiguos requieren la manipulación directa de la propiedad className del elemento.

* Los nombres de clase de nota no se almacenan en la propiedad del elemento en ningún orden particular

W3C DOM 4

Eliminar una clase de un elemento requiere un poco de manipulación de la propiedad className .

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

Eliminar varios nombres de clase requeriría un bucle. Los ejemplos restantes utilizarán una función para aislar el trabajo.

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");

Múltiples elementos con múltiples nombres de clase para eliminar requerirían dos bucles

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");
W3C DOM 4

Un solo nombre de clase puede ser eliminado como una cadena. Para eliminar varios nombres de clase, use el operador de propagación de ES6:

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

Para varios elementos, deberá eliminar los nombres de clase dentro de un bucle

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

Pruebas para una clase

Los navegadores modernos proporcionan un objeto classList para facilitar la manipulación del atributo de clase del elemento. Los navegadores más antiguos requieren la manipulación directa de la propiedad className del elemento.

* Los nombres de clase de nota no se almacenan en la propiedad del elemento en ningún orden particular

W3C DOM 4

Probar si un elemento contiene una clase requiere un poco de manipulación de la propiedad className . Este ejemplo utiliza un método de matriz para probar la clase.

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"));

La prueba de varios nombres de clase requeriría un bucle.

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"));

En lugar de usar .indexOf() , también puede considerar usar una expresión regular.

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

La prueba de un solo nombre de clase se realiza de la siguiente manera:

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

Para múltiples nombres de clase, es más fácil usar matches . Tenga en cuenta el uso del selector de clase; El selector puede ser cualquier selector de cadena válido (id, atributo, pseudo-clases, 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow