Start · Sprachen · JavaScript · Referenz · HTMLAllCollection.length

HTMLAllCollection.length

Eigenschaft

Gibt die Anzahl aller Elemente in der <code>HTMLAllCollection</code> (<code>document.all</code>) als nicht negative Ganzzahl zurück.

seit JavaScript Baseline: alle Browser (Legacy-API, HTML Living St deprecated seit ja Kategorie: webapi

Signatur

HTMLAllCollection.length

Beschreibung

Die schreibgeschützte Eigenschaft length liefert die Anzahl der Elemente, die eine HTMLAllCollection aktuell enthält. In der Praxis gibt es nur eine einzige Instanz dieser Schnittstelle: document.all. Sie enthält alle Elemente des Dokuments in Dokumentreihenfolge, einschließlich <html>, <head> und <body>.

Die Sammlung ist live. Das heißt, length passt sich automatisch an, wenn Elemente in den DOM eingefügt oder daraus entfernt werden. Einen Schnappschuss wie bei querySelectorAll() gibt es hier nicht.

document.all ist ein Überbleibsel aus der Zeit des Internet Explorer und nur noch aus Kompatibilitätsgründen spezifiziert. Für neuen Code nimmt man besser document.getElementsByTagName('*').length oder document.querySelectorAll('*').length. Die Eigenschaft ist trotzdem nützlich, wenn man alten Code versteht oder pflegt, der auf document.all aufbaut.

Rückgabewert

Typ
number
Beschreibung
Nicht negative Ganzzahl (unsigned long) mit der Anzahl der Elemente in der Sammlung.

Beispiele

Anzahl aller Elemente im Dokument ermitteln

// Zählt alle Elemente der aktuellen Seite
const anzahl = document.all.length;
console.log(`Die Seite enthält ${anzahl} Elemente.`);

// Moderne, gleichwertige Alternative
console.log(document.getElementsByTagName('*').length === anzahl);
Die Seite enthält 42 Elemente. true

Live-Verhalten beim Einfügen und Entfernen

const vorher = document.all.length;

const hinweis = document.createElement('div');
hinweis.textContent = 'Neuer Hinweis';
document.body.append(hinweis);
console.log(document.all.length - vorher); // 1

hinweis.remove();
console.log(document.all.length === vorher); // true
1 true

Über alle Elemente iterieren (Legacy-Code)

// Zählt die Tag-Namen in alter Schreibweise mit Index-Schleife
const statistik = {};
for (let i = 0; i < document.all.length; i++) {
  const tag = document.all[i].tagName.toLowerCase();
  statistik[tag] = (statistik[tag] ?? 0) + 1;
}
console.log(statistik);
{ html: 1, head: 1, meta: 2, title: 1, body: 1, div: 12, … }

// Wichtig · Fallstricke

  • Merkwürdiges Verhalten bei der Wahrheitsprüfung: document.all ist das einzige Objekt, das als falsy gilt. typeof document.all ergibt "undefined", und document.all == null ergibt true. Die Eigenschaft length lässt sich trotzdem normal lesen. Eine Abfrage wie if (document.all) schlägt aber in allen modernen Browsern fehl.
  • Schreibgeschützt: Wer length einen Wert zuweist, bewirkt nichts. Im Strict Mode wird ein TypeError ausgelöst.
  • Live-Sammlung: Wenn Sie in einer Schleife Elemente entfernen oder einfügen, ändert sich length während der Schleife. Legen Sie vorher mit Array.from(document.all) eine Kopie an.
  • Kompatibilität: Alle aktuellen Browser unterstützen die Eigenschaft. Sie gilt aber als veraltet und sollte in neuem Code nicht mehr verwendet werden. In Node.js gibt es sie nicht, ebenso wenig in den meisten DOM-Nachbildungen wie jsdom (dort nur eingeschränkt).