Start · Sprachen · JavaScript · Referenz · Document.all

Document.all

Eigenschaft

Schreibgeschützte, veraltete Eigenschaft, die eine <code>HTMLAllCollection</code> mit allen Elementen des Dokuments in Dokumentreihenfolge zurückgibt.

seit JavaScript Veraltet (deprecated) – aus Kompatibilitätsgründen deprecated seit ja Kategorie: webapi

Signatur

get Document.all

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

Typ
HTMLAllCollection
Beschreibung
Live-Sammlung aller Elemente im Dokument in Dokumentreihenfolge. Das Objekt ist falsy, und 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);
z. B. 42 HTML 42

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
undefined true false false Fallback true

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);
true true

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');
}
Standard-Zweig 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 || x und document.all ?? x behandeln das Objekt so, als gäbe es es nicht. Auch typeof liefert "undefined". Nur die strikte Prüfung document.all === undefined ergibt false.
  • Mehrdeutige Namen: Haben mehrere Elemente dieselbe id oder denselben name, gibt namedItem() eine HTMLCollection zurü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 oder querySelectorAll nutzen.
  • 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.