Signatur
Beschreibung
Die Methode item() des Interfaces StyleSheetList liefert ein einzelnes Stylesheet aus der Liste, die du typischerweise über document.styleSheets oder shadowRoot.styleSheets bekommst. Die Liste enthält alle Stylesheets, die per <link rel="stylesheet"> oder <style> eingebunden sind, in der Reihenfolge, in der sie im Dokument stehen.
Statt item(i) kannst du auch die Klammerschreibweise styleSheets[i] verwenden. Der wichtigste Unterschied: Bei einem Index außerhalb des gültigen Bereichs gibt item() null zurück, die Klammerschreibweise dagegen undefined.
Einsatzzwecke sind zum Beispiel das Untersuchen von Stylesheets (Herkunft über href, Ein- und Ausschalten über disabled), das Auslesen oder Ändern von Regeln über cssRules sowie Werkzeuge wie Theme-Umschalter oder Analysen für CSS-Abdeckung.
Die Liste ist live: Kommen Stylesheets zum DOM hinzu oder werden welche entfernt, ändern sich Inhalt und length sofort. Stylesheets, die über document.adoptedStyleSheets eingebunden sind, gehören nicht zu dieser Liste.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index Pflicht | number | Nullbasierte Position des gewünschten Stylesheets. Der Wert wird in eine vorzeichenlose 32-Bit-Ganzzahl umgewandelt (unsigned long). |
Rückgabewert
index oder null, wenn index >= length ist.Beispiele
Alle Stylesheets des Dokuments auflisten
const sheets = document.styleSheets;
for (let i = 0; i < sheets.length; i++) {
const sheet = sheets.item(i);
// Inline-<style>-Elemente haben kein href
console.log(i, sheet.href ?? '(inline)', sheet.ownerNode.nodeName);
}
Vergleich: item() und Klammerschreibweise bei ungültigem Index
const sheets = document.styleSheets;
const outOfRange = sheets.length + 5;
console.log(sheets.item(outOfRange)); // null
console.log(sheets[outOfRange]); // undefined
Stylesheet anhand der URL finden und abschalten (Theme-Umschalter)
const findSheet = (fragment) => {
const list = document.styleSheets;
for (let i = 0; i < list.length; i++) {
const sheet = list.item(i);
if (sheet?.href?.includes(fragment)) return sheet;
}
return null;
};
const darkTheme = findSheet('dark.css');
if (darkTheme) {
darkTheme.disabled = !darkTheme.disabled;
console.log('Dunkles Theme aktiv:', !darkTheme.disabled);
}
Regeln eines Stylesheets sicher auslesen
const first = document.styleSheets.item(0);
if (first) {
try {
const selectors = [...first.cssRules]
.filter((rule) => rule instanceof CSSStyleRule)
.map((rule) => rule.selectorText);
console.log(selectors);
} catch (err) {
// Fremdes Stylesheet ohne CORS-Freigabe
console.warn('Zugriff verweigert:', err.name);
}
}
// Wichtig · Fallstricke
- Rückgabe bei ungültigem Index:
item()gibtnullzurück,styleSheets[i]dagegenundefined. Das ist wichtig, wenn du strikt mit=== undefinedprüfst. - Negative Indizes: Werte wie
-1werden in eine große vorzeichenlose Zahl umgewandelt, das Ergebnis ist alsonull. Anders alsArray.prototype.at()zähltitem()nicht vom Ende her. - Kein echtes Array:
StyleSheetListhat keine Methoden wiemapoderfilter. MitArray.from(document.styleSheets)oder[...document.styleSheets]wandelst du die Liste um. Beachte dabei, dass so eine statische Kopie entsteht und keine Live-Liste mehr. - CORS: Bei Stylesheets von fremden Domains ohne
crossorigin-Attribut und passende CORS-Header löst der Zugriff aufcssRuleseinenSecurityErroraus.item()selbst funktioniert trotzdem. - Ladezeitpunkt: Ein
<link>-Stylesheet, das noch lädt oder nicht geladen werden konnte, fehlt in der Liste möglicherweise. Warte deshalb auf dasload-Ereignis des Elements. - Nicht enthalten: Stylesheets aus
adoptedStyleSheets, alternative Stylesheets werden je nach Browser unterschiedlich behandelt, und Regeln aus@importerreichst du nur überCSSImportRule.styleSheet. - Kompatibilität: Wird seit Langem von allen Browsern unterstützt.