Start · Sprachen · JavaScript · Referenz · DOMTokenList.length

DOMTokenList.length

Eigenschaft

Die schreibgeschützte Eigenschaft <code>length</code> gibt die Anzahl der Tokens (z. B. CSS-Klassen) in einer <code>DOMTokenList</code> als Ganzzahl zurück.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

DOMTokenList.length

Beschreibung

DOMTokenList.length liefert die Anzahl der Tokens, die aktuell in der Liste gespeichert sind. Die häufigste DOMTokenList ist Element.classList. Weitere Beispiele sind HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLIFrameElement.sandbox und HTMLOutputElement.htmlFor.

Die Liste ist live. Ändert sich das zugrunde liegende Attribut (etwa class), passt sich length sofort an, egal ob die Änderung über add(), remove(), toggle(), className oder setAttribute() erfolgt ist.

Typische Anwendungen sind die Prüfung, ob ein Element überhaupt Klassen hat, das Durchlaufen der Liste mit einer klassischen for-Schleife zusammen mit item(index) und die Begrenzung der Anzahl gesetzter Tokens. Doppelte Tokens im Attribut werden nur einmal gezählt, weil die Liste als geordnete Menge ohne Duplikate geführt wird.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative Ganzzahl (unsigned long) mit der Anzahl der eindeutigen Tokens in der Liste. Bei leerem oder fehlendem Attribut ist der Wert 0.

Beispiele

Anzahl der CSS-Klassen eines Elements ermitteln

const box = document.createElement('div');
box.className = 'card card--active shadow';

console.log(box.classList.length);
3

Live-Verhalten: length passt sich automatisch an

const btn = document.createElement('button');
console.log(btn.classList.length); // 0

btn.classList.add('btn', 'btn-primary');
console.log(btn.classList.length); // 2

btn.classList.remove('btn-primary');
console.log(btn.classList.length); // 1

btn.setAttribute('class', 'a b c d');
console.log(btn.classList.length); // 4
0 2 1 4

Duplikate und Leerzeichen werden nicht mitgezählt

const el = document.createElement('span');
el.setAttribute('class', '  foo   bar foo  ');

console.log(el.classList.length);
console.log([...el.classList]);
2 ["foo", "bar"]

Klassische Schleife mit item() und length

const nav = document.createElement('nav');
nav.className = 'menu menu--sticky dark';

const { classList } = nav;
for (let i = 0; i < classList.length; i++) {
  console.log(`${i}: ${classList.item(i)}`);
}

// Elemente ohne Klassen herausfiltern
const unstyled = [...document.querySelectorAll('p')]
  .filter((p) => p.classList.length === 0);
console.log(`Absätze ohne Klasse: ${unstyled.length}`);
0: menu 1: menu--sticky 2: dark Absätze ohne Klasse: …

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie el.classList.length = 0 wird im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode einen TypeError aus. Zum Leeren der Liste nutzt man el.className = '' oder el.removeAttribute('class').
  • Live-Liste: Wer beim Durchlaufen mit for (i < list.length) Tokens entfernt, überspringt Einträge, weil sich length und die Indizes verschieben. Deshalb besser rückwärts iterieren oder vorher mit [...list] eine Kopie anlegen.
  • Die Zahl beschreibt eindeutige Tokens, nicht Zeichen. el.className.length dagegen ist die Länge des Strings, einschließlich der Leerzeichen.
  • Wenn nur geprüft werden soll, ob ein bestimmtes Token vorhanden ist, ist contains() klarer als ein Vergleich über length.
  • Kompatibilität: Die Eigenschaft wird von allen modernen Browsern unterstützt. Der Internet Explorer 10/11 unterstützte classList nur für HTML-Elemente, nicht für SVG-Elemente.