DOM
Manipolazione di un elenco di classi CSS
Ricerca…
Aggiungere una classe
I browser moderni forniscono un oggetto classList
per facilitare la manipolazione dell'attributo di classe dell'elemento. I browser precedenti richiedono la manipolazione diretta della proprietà className
dell'elemento.
Un semplice metodo per aggiungere una classe a un elemento è aggiungerlo alla fine della proprietà className
. Ciò non impedirà nomi di classi duplicati e gli spazi devono essere inclusi tra i nomi di classe.
document.getElementById("link1").className += " foo";
document.getElementById("link2").className += " foo bar";
Per più elementi, dovrai aggiungere i nomi di classe all'interno di un ciclo
var els = document.getElementsByClassName("foo"),
indx = els.length;
while (indx--) {
els[indx].className += " bar baz";
}
Un nome di classe singola può essere aggiunto come una stringa. Per aggiungere più nomi di classe, utilizzare l'operatore di spread di ES6:
document.querySelector("#link1").classList.add("foo");
document.querySelector("#link2").classList.add(...['foo', 'bar']);
Per più elementi, dovrai aggiungere i nomi di classe all'interno di un ciclo
document.querySelectorAll(".foo").forEach(el => {
el.classList.add(...['bar', 'baz']);
});
Rimozione di una classe
I browser moderni forniscono un oggetto classList
per facilitare la manipolazione dell'attributo di classe dell'elemento. I browser precedenti richiedono la manipolazione diretta della proprietà className
dell'elemento.
* I nomi delle classi nota non sono memorizzati nella proprietà dell'elemento in alcun ordine particolare
La rimozione di una classe da un elemento richiede un po 'di manipolazione della proprietà className
.
var toRemove = "bar",
el = document.getElementById("link1");
el.className = el.className.replace(new RegExp("\\b" + toRemove + "\\b", "g"), "").trim();
La rimozione di più nomi di classe richiederebbe un ciclo. Gli esempi rimanenti utilizzeranno una funzione per isolare il lavoro
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");
Più elementi con nomi di classi multiple da rimuovere richiederebbero due cicli
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");
Un singolo nome di classe può essere rimosso come stringa. Per rimuovere più nomi di classe, utilizzare l'operatore di spread di ES6:
document.querySelector("#link1").classList.remove("foo");
document.querySelector("#link2").classList.remove(...['foo', 'bar']);
Per più elementi, dovrai rimuovere i nomi delle classi all'interno di un ciclo
document.querySelectorAll(".foo").forEach(el => {
el.classList.remove(...['bar', 'baz']);
});
Test per una classe
I browser moderni forniscono un oggetto classList
per facilitare la manipolazione dell'attributo di classe dell'elemento. I browser precedenti richiedono la manipolazione diretta della proprietà className
dell'elemento.
* I nomi delle classi nota non sono memorizzati nella proprietà dell'elemento in alcun ordine particolare
Verificare se un elemento contiene una classe richiede un po 'di manipolazione della proprietà className
. Questo esempio utilizza un metodo array per verificare 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"));
Il test per più nomi di classe richiederebbe un ciclo.
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"));
Invece di usare .indexOf()
, potresti anche considerare di usare un'espressione regolare.
function hasClass(el, name) {
return new RegExp("\\b" + name+ "\\b").test(el.className);
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
Il test per un nome di classe singola viene eseguito come segue:
var hasClass = document.querySelector("#link1").classList.contains("foo");
Per i nomi di più classi, è più facile utilizzare le matches
. Nota l'uso del selettore di classe; Il selettore può essere un qualsiasi selettore di stringa valido (id, attributo, pseudo-classi, ecc.).
var hasClass = document.querySelector("#link1").matches('.foo.bar');
var hasClass = document.querySelector("#link2").matches('a.bar[href]');