DOM
Eine Liste von CSS-Klassen bearbeiten
Suche…
Klasse hinzufügen
Moderne Browser bieten ein classList
Objekt, um die Bearbeitung des Klassenattributs des Elements zu erleichtern. Ältere Browser erfordern eine direkte Bearbeitung der className
des Elements.
Eine einfache Methode zum Hinzufügen einer Klasse zu einem Element besteht darin, diese an das Ende der className
Eigenschaft className
. Dies verhindert nicht, dass doppelte Klassennamen vorhanden sind. Zwischen den Klassennamen müssen Leerzeichen stehen.
document.getElementById("link1").className += " foo";
document.getElementById("link2").className += " foo bar";
Bei mehreren Elementen müssen Sie die Klassennamen in einer Schleife hinzufügen
var els = document.getElementsByClassName("foo"),
indx = els.length;
while (indx--) {
els[indx].className += " bar baz";
}
Ein einzelner Klassenname kann als Zeichenfolge hinzugefügt werden. Um mehrere Klassennamen hinzuzufügen, verwenden Sie den Spread-Operator von ES6:
document.querySelector("#link1").classList.add("foo");
document.querySelector("#link2").classList.add(...['foo', 'bar']);
Bei mehreren Elementen müssen Sie die Klassennamen in einer Schleife hinzufügen
document.querySelectorAll(".foo").forEach(el => {
el.classList.add(...['bar', 'baz']);
});
Klasse entfernen
Moderne Browser bieten ein classList
Objekt, um die Bearbeitung des Klassenattributs des Elements zu erleichtern. Ältere Browser erfordern eine direkte Bearbeitung der className
des Elements.
* Hinweis Klassennamen werden nicht in einer bestimmten Reihenfolge in der Eigenschaft des Elements gespeichert
Wenn Sie eine Klasse aus einem Element entfernen, müssen Sie die className
ein wenig className
.
var toRemove = "bar",
el = document.getElementById("link1");
el.className = el.className.replace(new RegExp("\\b" + toRemove + "\\b", "g"), "").trim();
Das Entfernen mehrerer Klassennamen würde eine Schleife erfordern. Die restlichen Beispiele verwenden eine Funktion, um die Arbeit zu isolieren
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");
Mehrere Elemente mit mehreren zu entfernenden Klassennamen würden zwei Schleifen erfordern
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");
Ein einzelner Klassenname kann als Zeichenfolge entfernt werden. Um mehrere Klassennamen zu entfernen, verwenden Sie den Spread-Operator von ES6:
document.querySelector("#link1").classList.remove("foo");
document.querySelector("#link2").classList.remove(...['foo', 'bar']);
Bei mehreren Elementen müssen Sie die Klassennamen in einer Schleife entfernen
document.querySelectorAll(".foo").forEach(el => {
el.classList.remove(...['bar', 'baz']);
});
Test für eine Klasse
Moderne Browser bieten ein classList
Objekt, um die Bearbeitung des Klassenattributs des Elements zu erleichtern. Ältere Browser erfordern eine direkte Bearbeitung der className
des Elements.
* Hinweis Klassennamen werden nicht in einer bestimmten Reihenfolge in der Eigenschaft des Elements gespeichert
className
ob ein Element eine Klasse enthält, muss die className
ein wenig className
. In diesem Beispiel wird eine Array-Methode verwendet, um die Klasse zu testen.
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"));
Das Testen auf mehrere Klassennamen würde eine Schleife erfordern.
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"));
Anstelle von .indexOf()
können Sie auch einen regulären Ausdruck verwenden.
function hasClass(el, name) {
return new RegExp("\\b" + name+ "\\b").test(el.className);
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
Das Testen eines einzelnen Klassennamens wird wie folgt durchgeführt:
var hasClass = document.querySelector("#link1").classList.contains("foo");
Bei mehreren Klassennamen ist es einfacher, matches
zu verwenden. Beachten Sie die Verwendung der Klassenauswahl. Der Selektor kann ein beliebiger gültiger String-Selektor sein (ID, Attribut, Pseudoklassen usw.).
var hasClass = document.querySelector("#link1").matches('.foo.bar');
var hasClass = document.querySelector("#link2").matches('a.bar[href]');