Signatur
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
"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}`);
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);
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]);
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);
// Wichtig · Fallstricke
null-Fall: Fehlt die DOCTYPE-Deklaration, istdocument.doctypegleichnull. Ein direkter Zugriff aufdocument.doctype.namewirft dann einenTypeError. 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
namewird stillschweigend ignoriert, im Strict Mode wirft sie einenTypeError. Um den Dokumenttyp zu ersetzen, erzeugst du einen neuen Knoten mitcreateDocumentType()und tauschst ihn mitreplaceWith()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.nodeNamedesDocumentType-Knotens. - Die Eigenschaft wird von allen Browsern unterstützt. In Node.js steht sie nur über DOM-Implementierungen wie jsdom zur Verfügung.