Signatur
Beschreibung
Die Eigenschaft className spiegelt das Inhaltsattribut class eines Elements wider. Beim Lesen erhältst du den vollständigen Attributwert als String, z. B. "btn btn-primary active". Beim Schreiben wird das komplette class-Attribut durch den neuen Wert ersetzt.
Der Name lautet className statt class, weil class in JavaScript ein reserviertes Wort ist. Fehlt das Attribut, liefert className einen leeren String "".
Nimm className, wenn du alle Klassen auf einmal setzen, zurücksetzen oder als Ganzes auslesen willst, etwa beim Serialisieren oder beim Übernehmen der Klassen eines anderen Elements. Für einzelne Klassen (hinzufügen, entfernen, umschalten, prüfen) ist Element.classList fast immer die bessere Wahl, weil du dann keine Strings von Hand zerlegen musst.
Rückgabewert
class-Attributs als durch Leerzeichen getrennter String. Fehlt das Attribut, ist der Wert "". Beim Zuweisen wird der Wert in einen String umgewandelt und als neues class-Attribut gesetzt.Beispiele
Klassen auslesen und komplett ersetzen
const button = document.createElement('button');
button.className = 'btn btn-primary';
console.log(button.className);
// Überschreibt ALLE vorhandenen Klassen
button.className = 'btn btn-danger';
console.log(button.outerHTML);
Prüfen, ob eine Klasse vorhanden ist (sicher per split)
const el = document.createElement('div');
el.className = 'card card-highlighted';
// Falsch: 'card'.includes würde auch bei 'card-highlighted' treffen
const hasClass = (element, name) =>
element.className.split(/\s+/).includes(name);
console.log(hasClass(el, 'card'));
console.log(hasClass(el, 'highlighted'));
// Moderne Alternative:
console.log(el.classList.contains('card'));
Status-Klassen aus einem Objekt zusammensetzen
const buildClassName = (base, flags) =>
[base, ...Object.entries(flags)
.filter(([, active]) => active)
.map(([name]) => name)]
.join(' ');
const input = document.createElement('input');
const state = { 'is-invalid': true, 'is-disabled': false, 'is-focused': true };
input.className = buildClassName('form-control', state);
console.log(input.className);
Alle Klassen entfernen und Klassen kopieren
const source = document.createElement('p');
source.className = 'text-muted small';
const target = document.createElement('p');
target.className = source.className; // Klassen übernehmen
console.log(target.className);
target.className = ''; // alle Klassen entfernen
console.log(JSON.stringify(target.className), target.hasAttribute('class'));
// Wichtig · Fallstricke
- Überschreiben statt Ergänzen:
el.className = 'neu'löscht alle bisherigen Klassen. Zum Ergänzen nimmst duel.classList.add('neu'). Einel.className += ' neu'funktioniert zwar, erzeugt aber leicht doppelte Klassen oder überflüssige Leerzeichen. - Teilstring-Falle:
el.className.includes('active')trifft auch beiinactivezu. Prüfe deshalb mitclassList.contains()oder zerlege den String persplit(/\s+/). - SVG-Elemente: Bei SVG-Elementen (
SVGElement) istclassNamekein String, sondern einSVGAnimatedString. Den Wert erreichst du dort überel.className.baseVal. Für Code, der mit HTML und SVG gleichermaßen funktionieren soll, sindgetAttribute('class')oderclassListsicherer. - Leerer String:
el.className = ''lässt ein leeresclass=""-Attribut stehen. Soll das Attribut ganz verschwinden, nimmel.removeAttribute('class'). - Typumwandlung: Zugewiesene Werte werden in Strings umgewandelt.
el.className = nullergibt deshalb die Klasse"null". - Performance: Jede Zuweisung kann eine Neuberechnung der Stile auslösen. Viele Änderungen fasst du am besten zu einer einzigen Zuweisung zusammen.
- Die Eigenschaft wird von allen Browsern unterstützt, auch von sehr alten.