Signatur
Beschreibung
Die Methode keys() des Interfaces DOMTokenList gibt einen Iterator zurück, mit dem man alle Schlüssel der Liste durchlaufen kann. Die Schlüssel sind die numerischen Indizes der Tokens, also 0 bis length - 1, und zwar als Zahlen (Typ number).
Eine DOMTokenList begegnet einem vor allem als element.classList, aber auch bei relList von <a>, <link> und <form>, bei sandbox von <iframe> und bei part. Mit keys() kommt man an die Positionen der Einträge, zum Beispiel um sie zusammen mit item(index) auszuwerten oder zu nummerieren.
In der Praxis braucht man keys() selten allein. Meist ist entries() praktischer, weil es Index und Wert zusammen liefert, oder values() bzw. eine direkte for...of-Schleife über die Liste, wenn nur die Tokens selbst gebraucht werden. Der Iterator hält sich an das Iterator-Protokoll: Man kann ihn in for...of, mit dem Spread-Operator oder mit Array.from() verwenden.
Rückgabewert
number) aller Tokens der Liste liefert.Beispiele
Indizes der CSS-Klassen durchlaufen
const div = document.createElement('div');
div.className = 'card active highlighted';
for (const key of div.classList.keys()) {
console.log(key, div.classList.item(key));
}
Iterator in ein Array umwandeln
const link = document.createElement('a');
link.rel = 'noopener noreferrer nofollow';
const indizes = [...link.relList.keys()];
console.log(indizes);
Iterator manuell mit next() abfragen
const el = document.createElement('span');
el.classList.add('a', 'b');
const it = el.classList.keys();
console.log(it.next()); // { value: 0, done: false }
console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: undefined, done: true }
Klassen nummeriert protokollieren (Vergleich mit entries())
const btn = document.createElement('button');
btn.classList.add('btn', 'btn-primary', 'is-loading');
// Mit keys() + item()
const liste = Array.from(btn.classList.keys(), (i) => `${i + 1}. ${btn.classList.item(i)}`);
console.log(liste.join('\n'));
// Kürzer mit entries()
for (const [i, name] of btn.classList.entries()) {
console.log(i, name);
}
// Wichtig · Fallstricke
- Live-Liste: Die
DOMTokenListist live. Werden während der Iteration Klassen hinzugefügt oder entfernt (z. B. mitclassList.remove()), verschieben sich die Indizes, und der Iterator kann Einträge überspringen. Wer die Liste verändern will, sollte vorher eine Kopie anlegen, z. B. mit[...el.classList.keys()]. - Die Schlüssel sind Zahlen, keine Klassennamen. Für die Tokens selbst gibt es
values()oder direktfor...of. - Doppelte Tokens im Attribut werden entfernt:
class="a a b"ergibt nur die Indizes0und1. - Wird von allen modernen Browsern unterstützt. Der Internet Explorer kennt die Methode nicht; dort bleibt nur eine klassische
for-Schleife überlength.