Start · Sprachen · JavaScript · Referenz · Document.doctype

Document.doctype

Eigenschaft

Schreibgeschützte Eigenschaft, die die Dokumenttyp-Deklaration (<code>&lt;!DOCTYPE&gt;</code>) des Dokuments als <code>DocumentType</code>-Objekt oder <code>null</code> liefert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

get Document.doctype

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

Typ
DocumentType | null
Beschreibung
Der 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');
}
html

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));
<!DOCTYPE html>

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();
Modus: CSS1Compat

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

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an document.doctype hat keine Wirkung (im Strict Mode wirft sie einen TypeError). 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 null prüfen: Dokumente ohne Doctype, etwa per DOMParser geparste Fragmente oder alte Seiten, liefern null. Ein direkter Zugriff wie document.doctype.name wirft dann einen TypeError. Optional Chaining hilft: document.doctype?.name.
  • Für die Frage „Standard- oder Quirks-Modus?“ ist document.compatMode zuverlässiger als die Auswertung des Doctypes. Der Browser entscheidet anhand genauer Regeln aus der HTML-Spezifikation.
  • Der Doctype-Knoten fehlt in documentElement.outerHTML und 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.