Signatur
Beschreibung
Die Eigenschaft document.doctype gibt den DocumentType-Knoten zurück, der zum aktuellen Dokument gehört. Das ist die DOM-Darstellung der Zeile <!DOCTYPE html> am Anfang einer HTML-Datei. Hat das Dokument keine Dokumenttyp-Deklaration, ist der Wert null.
Über das zurückgegebene Objekt kommst du an den Namen (name, bei HTML5 meist "html") sowie an publicId und systemId. Die beiden letzten sind bei älteren Doctypes wie HTML 4.01 oder XHTML 1.0 belegt und bei HTML5 leere Zeichenketten. Damit kannst du z. B. prüfen, ob eine Seite im Standardmodus oder möglicherweise im Quirks-Modus dargestellt wird, oder den Doctype beim Serialisieren eines Dokuments mit ausgeben.
Der DocumentType-Knoten ist ein echter Kindknoten des Dokuments und steht in document.childNodes normalerweise an erster Stelle. document.documentElement.outerHTML enthält ihn nicht. Willst du das komplette Dokument als String haben, musst du den Doctype also getrennt serialisieren, zum Beispiel mit XMLSerializer.
Rückgabewert
DocumentType-Knoten des Dokuments oder null, wenn keine Dokumenttyp-Deklaration vorhanden ist.Beispiele
Doctype-Informationen auslesen
const dt = document.doctype;
if (dt) {
console.log(dt.name); // Name des Wurzelelements
console.log(dt.publicId); // bei HTML5 leer
console.log(dt.systemId); // bei HTML5 leer
} else {
console.log('Kein Doctype vorhanden');
}
Vollständiges Dokument inklusive Doctype serialisieren
const serializeDocument = (doc = document) => {
const doctype = doc.doctype
? new XMLSerializer().serializeToString(doc.doctype)
: '';
return `${doctype}\n${doc.documentElement.outerHTML}`;
};
const html = serializeDocument();
console.log(html.slice(0, 15));
Quirks-Modus und fehlenden Doctype erkennen
const checkRenderingMode = () => {
const dt = document.doctype;
if (!dt) {
console.warn('Kein Doctype – Seite läuft im Quirks-Modus.');
}
// compatMode: 'CSS1Compat' = Standardmodus, 'BackCompat' = Quirks-Modus
console.log('Modus:', document.compatMode);
};
checkRenderingMode();
Doctype in einem neu erzeugten Dokument
const doctype = document.implementation.createDocumentType('html', '', '');
const xmlDoc = document.implementation.createDocument(null, 'html', doctype);
console.log(xmlDoc.doctype === doctype);
console.log(xmlDoc.doctype.name);
// Per DOMParser erzeugtes HTML ohne Doctype
const parsed = new DOMParser().parseFromString('<p>Hallo</p>', 'text/html');
console.log(parsed.doctype);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
document.doctypehat keine Wirkung (im Strict Mode wirft sie einenTypeError). Um den Doctype auszutauschen, arbeitest du mit DOM-Methoden am Knoten selbst, z. B.document.doctype.replaceWith(neuerDoctype). Den Darstellungsmodus einer bereits geladenen Seite ändert das aber nicht mehr. - Immer auf
nullprüfen: Dokumente ohne Doctype, etwa perDOMParsergeparste Fragmente oder alte Seiten, liefernnull. Ein direkter Zugriff wiedocument.doctype.namewirft dann einenTypeError. Optional Chaining hilft:document.doctype?.name. - Für die Frage „Standard- oder Quirks-Modus?“ ist
document.compatModezuverlässiger als die Auswertung des Doctypes. Der Browser entscheidet anhand genauer Regeln aus der HTML-Spezifikation. - Der Doctype-Knoten fehlt in
documentElement.outerHTMLund muss beim Serialisieren getrennt behandelt werden. - Kompatibilität: Die Eigenschaft wird von allen aktuellen Browsern unterstützt. Sehr alte Internet-Explorer-Versionen (IE 8 und älter) lieferten abweichende Werte.