Signatur
Beschreibung
document.all stammt aus der Zeit von Internet Explorer 4 und gibt eine HTMLAllCollection zurück. Sie enthält alle Elemente des Dokuments in Dokumentreihenfolge. Die Sammlung ist live: Kommen Elemente hinzu oder werden welche entfernt, ändert sich ihr Inhalt automatisch mit.
Die Eigenschaft wurde nur in den HTML-Standard übernommen, damit alte Webseiten weiter funktionieren. Sie hat eine in JavaScript einzigartige Besonderheit: Das Objekt ist „falsy“. typeof document.all ergibt "undefined", und document.all == null ist true, obwohl das Objekt existiert und benutzt werden kann. In ECMAScript heißt dieses Verhalten [[IsHTMLDDA]]. So wurde verhindert, dass alte Browserweichen wie if (document.all) { /* IE-Code */ } in modernen Browsern den IE-Zweig ausführen.
Man kann auf Elemente über den Index (document.all[0]), über item() oder über namedItem() per id/name zugreifen. Die Sammlung lässt sich außerdem direkt aufrufen: document.all("id"). In neuem Code sollte man stattdessen document.querySelectorAll("*"), document.getElementById() oder document.getElementsByTagName("*") verwenden.
Rückgabewert
typeof liefert "undefined".Beispiele
Elemente zählen und per Index zugreifen
// Alle Elemente des Dokuments (veraltete Variante)
const alle = document.all;
console.log(alle.length); // Anzahl aller Elemente
console.log(alle[0].tagName); // erstes Element: das <html>-Element
// Moderne Entsprechung
console.log(document.querySelectorAll('*').length);
Das besondere falsy-Verhalten
console.log(typeof document.all); // "undefined"
console.log(document.all == null); // true (lose Gleichheit)
console.log(document.all === undefined); // false (strikte Gleichheit)
console.log(Boolean(document.all)); // false
console.log(document.all ?? 'Fallback'); // "Fallback" – Achtung!
console.log(document.all.length > 0); // true – das Objekt funktioniert trotzdem
Zugriff per id/name und Umstieg auf moderne APIs
// HTML: <input id="email" name="email">
const altItem = document.all.namedItem('email');
const altAufruf = document.all('email'); // die Sammlung ist aufrufbar
// Empfohlen:
const modern = document.getElementById('email');
console.log(altItem === modern, altAufruf === modern);
Alte Browserweiche erkennen und ersetzen
// Legacy-Code: wird in modernen Browsern NICHT ausgeführt, weil document.all falsy ist
if (document.all) {
console.log('Internet-Explorer-Zweig');
} else {
console.log('Standard-Zweig');
}
// Besser: Funktionen erkennen statt Browser erraten
if ('querySelector' in document) {
console.log('Moderne DOM-API verfügbar');
}
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft ist nur aus Kompatibilitätsgründen spezifiziert. In neuem Code sollte man sie nicht verwenden. Linter wie ESLint und TypeScript warnen davor.
- Falsy-Fallstrick:
if (document.all),!!document.all,document.all || xunddocument.all ?? xbehandeln das Objekt so, als gäbe es es nicht. Auchtypeofliefert"undefined". Nur die strikte Prüfungdocument.all === undefinedergibtfalse. - Mehrdeutige Namen: Haben mehrere Elemente dieselbe
idoder denselbenname, gibtnamedItem()eineHTMLCollectionzurück statt eines einzelnen Elements. - Leistung: Die Live-Sammlung wird bei DOM-Änderungen aktualisiert. Wer in großen Dokumenten viel über sie iteriert, sollte vorher mit
Array.from()eine statische Kopie erstellen oderquerySelectorAllnutzen. - Kompatibilität: Alle aktuellen Browser unterstützen die Eigenschaft (Chrome, Firefox, Safari, Edge). In Node.js gibt es sie nicht. jsdom bildet sie teilweise nach.