Start · Sprachen · JavaScript · Referenz · DocumentType.name

DocumentType.name

Eigenschaft

Die schreibgeschützte Eigenschaft <code>DocumentType.name</code> liefert den Namen des Dokumenttyps, z. B. <code>"html"</code> bei <code>&lt;!DOCTYPE html&gt;</code>.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

DocumentType.name

Beschreibung

Die Eigenschaft name eines DocumentType-Knotens gibt den Namen zurück, der direkt nach <!DOCTYPE steht. Bei modernen HTML5-Dokumenten mit <!DOCTYPE html> ist das "html". Bei XML- oder SVG-Dokumenten steht dort meist der Name des Wurzelelements, etwa "svg" oder "math".

An den DocumentType-Knoten des aktuellen Dokuments kommst du über document.doctype. Hat das Dokument keine DOCTYPE-Deklaration, ist document.doctype gleich null. Deshalb solltest du vor dem Zugriff auf name immer prüfen, ob der Knoten existiert, zum Beispiel mit optionaler Verkettung (?.).

Typische Einsatzfälle sind Diagnose-Werkzeuge, Browser-Erweiterungen und Tests, die prüfen, ob eine Seite im Standardmodus läuft. Außerdem brauchst du die Eigenschaft, wenn du ein Dokument vollständig serialisieren willst, denn document.documentElement.outerHTML enthält die DOCTYPE-Zeile nicht. Den Wert kannst du nicht nachträglich ändern. Einen neuen Dokumenttyp legst du mit document.implementation.createDocumentType() an.

Rückgabewert

Typ
string
Beschreibung
Der Name des Dokumenttyps, z. B. "html". Der Wert lässt sich nicht verändern.

Beispiele

Namen des Dokumenttyps auslesen

// Funktioniert auch ohne DOCTYPE, dank optionaler Verkettung
const doctypeName = document.doctype?.name ?? '(kein DOCTYPE)';
console.log(`Dokumenttyp: ${doctypeName}`);
Dokumenttyp: html

Prüfen, ob die Seite als HTML5-Dokument deklariert ist

const isHtml5Doctype = () => {
  const dt = document.doctype;
  // HTML5: Name "html", keine publicId und keine systemId
  return dt !== null && dt.name.toLowerCase() === 'html' && dt.publicId === '' && dt.systemId === '';
};

console.log(isHtml5Doctype(), document.compatMode);
true CSS1Compat

DOCTYPE-Zeile für die Serialisierung wiederherstellen

const serializeDoctype = (dt) => {
  if (!dt) return '';
  let out = `<!DOCTYPE ${dt.name}`;
  if (dt.publicId) out += ` PUBLIC "${dt.publicId}"`;
  else if (dt.systemId) out += ' SYSTEM';
  if (dt.systemId) out += ` "${dt.systemId}"`;
  return `${out}>`;
};

const fullHtml = serializeDoctype(document.doctype) + '\n' + document.documentElement.outerHTML;
console.log(fullHtml.split('\n')[0]);
<!DOCTYPE html>

Eigenen Dokumenttyp erzeugen

const dt = document.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
const svgDoc = document.implementation.createDocument('http://www.w3.org/2000/svg', 'svg', dt);
console.log(svgDoc.doctype.name);
svg

// Wichtig · Fallstricke

  • null-Fall: Fehlt die DOCTYPE-Deklaration, ist document.doctype gleich null. Ein direkter Zugriff auf document.doctype.name wirft dann einen TypeError. Verwende ?. oder prüfe den Knoten vorher.
  • Groß- und Kleinschreibung: Der HTML-Parser wandelt den Namen in Kleinbuchstaben um. Aus <!DOCTYPE HTML> wird also "html". In XML-Dokumenten bleibt die Schreibweise so, wie sie in der Quelle steht. Vergleiche am besten ohne Rücksicht auf Groß- und Kleinschreibung.
  • Schreibgeschützt: Eine Zuweisung an name wird stillschweigend ignoriert, im Strict Mode wirft sie einen TypeError. Um den Dokumenttyp zu ersetzen, erzeugst du einen neuen Knoten mit createDocumentType() und tauschst ihn mit replaceWith() aus.
  • Kein Hinweis auf den Rendermodus: Ob die Seite im Standard- oder im Quirks-Modus läuft, erkennst du zuverlässig nur über document.compatMode. Der Name allein sagt das nicht aus.
  • Der Wert ist identisch mit Node.nodeName des DocumentType-Knotens.
  • Die Eigenschaft wird von allen Browsern unterstützt. In Node.js steht sie nur über DOM-Implementierungen wie jsdom zur Verfügung.