Signatur
Beschreibung
Document.firstElementChild stammt aus dem ParentNode-Mixin und gibt das erste direkte Kind des Dokuments zurück, das ein Element ist. Textknoten, Kommentare und die Doctype-Deklaration (<!DOCTYPE html>) werden übersprungen. Deshalb ist der Wert im Gegensatz zu document.firstChild nie ein DocumentType- oder Comment-Knoten.
Ein Dokument darf höchstens ein Wurzelelement haben. Darum liefert document.firstElementChild in der Praxis dasselbe wie document.documentElement, also bei HTML das <html>-Element und bei XML- oder SVG-Dokumenten deren Wurzelelement. Mit new Document() oder document.implementation.createDocument() lassen sich aber leere Dokumente ohne Wurzelelement erzeugen. Dann ist der Wert null.
Nützlich ist die Eigenschaft vor allem in allgemeinem Code, der gleich mit Document, DocumentFragment und Element umgehen soll, weil alle drei das ParentNode-Mixin umsetzen. Wenn Sie ausdrücklich das Wurzelelement meinen, ist document.documentElement meist lesbarer.
Rückgabewert
null, wenn das Dokument kein Element enthält.Beispiele
Wurzelelement eines HTML-Dokuments ermitteln
// Doctype und Kommentare vor <html> werden übersprungen
const root = document.firstElementChild;
console.log(root.tagName);
console.log(root === document.documentElement);
// Vergleich mit firstChild: liefert den Doctype-Knoten
console.log(document.firstChild.nodeName);
Leeres Dokument ohne Wurzelelement
const doc = new Document();
console.log(doc.firstElementChild); // noch kein Element vorhanden
const root = doc.createElement('config');
doc.appendChild(root);
console.log(doc.firstElementChild.nodeName);
Geparstes XML-Dokument auswerten
const xml = `<?xml version="1.0"?>
<!-- Export -->
<users><user id="1">Anna</user></users>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
const root = doc.firstElementChild;
console.log(root.nodeName);
console.log(root.firstElementChild.getAttribute('id'));
Allgemeine Hilfsfunktion für jeden ParentNode
// Funktioniert für Document, DocumentFragment und Element gleichermaßen
const firstTag = (parent) => parent.firstElementChild?.tagName.toLowerCase() ?? '(keins)';
const frag = document.createDocumentFragment();
console.log(firstTag(document));
console.log(firstTag(frag));
console.log(firstTag(document.body));
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
document.firstElementChild = elwird im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. Um das Wurzelelement auszutauschen, nutzen Siedocument.replaceChild()bzw.replaceChildren(). - Nicht mit
firstChildverwechseln:document.firstChildist in HTML-Dokumenten meist derDocumentType-Knoten, nicht<html>. - Auf
nullprüfen: Bei selbst erzeugten oder fehlerhaft geparsten Dokumenten kann der Wertnullsein. Optional Chaining (?.) verhindert dann Laufzeitfehler. Beachten Sie auch, dassDOMParserbei ungültigem XML ein<parsererror>-Element als Wurzel liefert. - Live-Wert: Die Eigenschaft wird bei jedem Zugriff neu ermittelt und spiegelt den aktuellen DOM-Zustand wider.
- Kompatibilität: Wird von allen modernen Browsern unterstützt. Auf
DocumentundDocumentFragmentfehlte die Eigenschaft in sehr alten Versionen (z. B. Internet Explorer), dort gab es sie nur aufElement. Als Ausweichlösung dientdocument.documentElement. In Node.js gibt es sie nur über DOM-Implementierungen wie jsdom.