Signatur
Beschreibung
Die Methode item() liefert eine einzelne CSS-Regel aus einer CSSRuleList. Solche Listen bekommt man vor allem über CSSStyleSheet.cssRules. Auch verschachtelte Regeln wie @media, @supports oder @layer stellen ihre Kindregeln über CSSGroupingRule.cssRules als solche Liste bereit.
Ein Aufruf von item(i) entspricht dem Zugriff mit eckigen Klammern list[i]. Der Unterschied liegt beim ungültigen Index: item() gibt dann null zurück, die Klammerschreibweise dagegen undefined. Mit item() lassen sich Stylesheets analysieren, bestimmte Regeln finden oder Styles zur Laufzeit prüfen, etwa beim Theming, beim Debuggen oder in Werkzeugen, die ungenutztes CSS aufspüren.
Die Liste ist live. Wenn Sie Regeln mit insertRule() oder deleteRule() einfügen oder entfernen, ändern sich length und die Indizes sofort. Das sollten Sie beim Durchlaufen in einer Schleife beachten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index Pflicht | number | Nullbasierte Position der gewünschten Regel. Der Wert wird in eine vorzeichenlose 32-Bit-Ganzzahl umgewandelt (unsigned long). Zum Beispiel wird -1 zu 4294967295 und liefert damit null. |
Rückgabewert
CSSRule an der angegebenen Position, zum Beispiel eine CSSStyleRule, CSSMediaRule oder CSSKeyframesRule. Ist index größer oder gleich length, wird null zurückgegeben.Beispiele
Erste Regel eines Stylesheets auslesen
// Voraussetzung: <style>body { margin: 0; } h1 { color: teal; }</style>
const sheet = document.styleSheets[0];
const rules = sheet.cssRules;
const first = rules.item(0);
console.log(first.cssText);
console.log(rules.item(99)); // Index existiert nicht
Alle Regeln durchlaufen und nach Selektor suchen
const findRule = (sheet, selector) => {
const rules = sheet.cssRules;
for (let i = 0; i < rules.length; i++) {
const rule = rules.item(i);
if (rule instanceof CSSStyleRule && rule.selectorText === selector) {
return rule;
}
}
return null;
};
const h1Rule = findRule(document.styleSheets[0], 'h1');
if (h1Rule) {
h1Rule.style.color = 'crimson'; // Regel direkt ändern
console.log(h1Rule.cssText);
}
Verschachtelte @media-Regeln auswerten
const style = document.createElement('style');
style.textContent = `
@media (max-width: 600px) {
.nav { display: none; }
.burger { display: block; }
}`;
document.head.append(style);
const media = style.sheet.cssRules.item(0);
console.log(media.conditionText);
for (let i = 0; i < media.cssRules.length; i++) {
console.log(media.cssRules.item(i).selectorText);
}
item() im Vergleich zur Klammerschreibweise
const rules = document.styleSheets[0].cssRules;
const outOfRange = rules.length + 5;
console.log(rules.item(outOfRange)); // null
console.log(rules[outOfRange]); // undefined
// Moderne Alternative: in ein Array umwandeln
const selectors = Array.from(rules)
.filter((r) => r instanceof CSSStyleRule)
.map((r) => r.selectorText);
console.log(selectors);
// Wichtig · Fallstricke
- CORS: Stylesheets, die von einem fremden Ursprung geladen werden, sind ohne passende CORS-Header (und
crossorigin-Attribut) gesperrt. Schon der Zugriff aufsheet.cssRuleswirft dann einenSecurityError, sodassitem()gar nicht erst aufgerufen werden kann. Umschließen Sie den Zugriff daher mittry/catch. - Live-Liste: Wenn Sie in einer Schleife mit
deleteRule(i)löschen, rücken die folgenden Indizes nach. Durchlaufen Sie die Liste in diesem Fall rückwärts. - Negative Indizes:
item(-1)liefert nicht die letzte Regel, sondernnull. Für die letzte Regel nutzen Sieitem(rules.length - 1). - Kein Array:
CSSRuleListist iterierbar (for...of), hat aber keine Array-Methoden wiemapoderfilter. Wandeln Sie die Liste bei Bedarf mitArray.from()um. - Der Typ der zurückgegebenen Regel ist unterschiedlich. Prüfen Sie ihn mit
instanceof(z. B.CSSStyleRule), bevor Sie aufselectorTextoderstylezugreifen. - Wird die Methode ohne Argument aufgerufen, wirft sie einen
TypeError.