Signatur
Beschreibung
DOMTokenList ist eine live aktualisierte, geordnete Menge von Tokens. Sie gehört immer zu einem Attribut, dessen Wert aus durch Leerzeichen getrennten Wörtern besteht. Die bekanntesten Vertreter sind Element.classList (Attribut class), HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLIFrameElement.sandbox und HTMLOutputElement.htmlFor. Ändert man die Liste, ändert sich das Attribut sofort – und umgekehrt.
Die wichtigsten Mitglieder:
length– Anzahl der Tokens;value– das Attribut als Zeichenkette (lesbar und schreibbar).item(index)bzw.list[index]– Token an einer Position odernull.contains(token)– prüft, ob ein Token vorhanden ist.add(...tokens)/remove(...tokens)– fügt Tokens hinzu oder entfernt sie; Duplikate werden ignoriert.toggle(token, force?)– schaltet ein Token um und gibttruezurück, wenn es danach vorhanden ist.replace(alt, neu)– ersetzt ein Token und gibttruezurück, wenn es ersetzt wurde.supports(token)– prüft bei Listen mit festen erlaubten Werten (z. B.relList,sandbox), ob das Token unterstützt wird.entries(),keys(),values(),forEach()sowiefor...of, da die Liste iterierbar ist.
Nimm DOMTokenList immer dann, wenn du einzelne Klassen oder Link-Beziehungen ändern willst, ohne selbst Zeichenketten zu zerlegen. Mit className += " aktiv" bekommst du leicht doppelte Leerzeichen oder doppelte Einträge; classList.add("aktiv") passiert das nicht.
Rückgabewert
element.classList oder link.relList.Beispiele
Instanz über classList holen und Klassen bearbeiten
const box = document.createElement('div');
box.className = 'karte schatten';
const klassen = box.classList; // DOMTokenList
klassen.add('aktiv', 'gross');
klassen.remove('schatten');
console.log(klassen.length);
console.log(klassen.value);
console.log(klassen.contains('aktiv'));
console.log(box.getAttribute('class'));
toggle() mit force für einen Menü-Schalter
const menue = document.createElement('nav');
const istOffen = (offen) => menue.classList.toggle('offen', offen);
console.log(menue.classList.toggle('offen')); // ein
console.log(menue.classList.toggle('offen')); // aus
console.log(istOffen(true)); // erzwingt vorhanden
console.log(istOffen(true)); // bleibt vorhanden
console.log(menue.className);
replace() und Iteration für Theme-Wechsel
const root = document.createElement('html');
root.classList.add('theme-hell', 'schrift-normal');
const ersetzt = root.classList.replace('theme-hell', 'theme-dunkel');
console.log(ersetzt);
for (const token of root.classList) {
console.log(token);
}
console.log([...root.classList].filter((k) => k.startsWith('theme-')));
supports() mit relList zur Feature-Erkennung
const link = document.createElement('link');
if (link.relList.supports('preload')) {
link.rel = 'preload';
link.as = 'style';
link.href = '/css/haupt.css';
document.head.append(link);
console.log('Preload wird unterstützt');
} else {
console.log('Kein Preload – normales Stylesheet laden');
}
// Wichtig · Fallstricke
- Live-Liste: Die Liste ändert sich sofort mit dem Attribut. Wenn du beim Durchlaufen Tokens entfernst, werden Einträge übersprungen. Lege vorher mit
[...el.classList]eine Kopie an. - Leerzeichen im Token:
add('a b')wirft einenInvalidCharacterErrorundadd('')einenSyntaxError. Übergib mehrere Tokens als einzelne Argumente:add('a', 'b'). - Groß- und Kleinschreibung: Tokens werden mit Unterscheidung von Groß- und Kleinschreibung verglichen.
'Aktiv'und'aktiv'sind also verschiedene Tokens. - supports(): Das funktioniert nur bei Listen mit festen erlaubten Werten. Bei
classListwirft der Aufruf einenTypeError. - Leeres Attribut: Wenn du alle Tokens entfernst, bleibt ein leeres
class=""-Attribut stehen. Zum vollständigen Entfernen nimmst duremoveAttribute('class'). - Kompatibilität: Grundfunktionen gibt es in allen aktuellen Browsern. Mehrere Argumente bei
add()/remove(), das zweite Argument vontoggle(),replace()undsupports()fehlen im Internet Explorer. Bei SVG-Elementen im alten IE gibt es auch keinclassList.