Signatur
Beschreibung
Die Eigenschaft DocumentType.publicId gibt den öffentlichen Bezeichner einer Dokumenttyp-Deklaration (DTD) zurück, also den formalen Namen hinter dem Schlüsselwort PUBLIC. Bei <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> lautet der Wert beispielsweise "-//W3C//DTD XHTML 1.0 Strict//EN".
Beim modernen HTML5-Doctype <!DOCTYPE html> gibt es keinen öffentlichen Bezeichner, daher ist der Wert ein leerer String ("") und nicht null. Zugriff erhalten Sie in der Regel über document.doctype, das ein DocumentType-Objekt oder null liefert, wenn keine Deklaration vorhanden ist.
Nützlich ist die Eigenschaft vor allem für Diagnose- und Analysewerkzeuge: um festzustellen, ob eine Seite ein veraltetes HTML-4.01- oder XHTML-Doctype verwendet, um den Doctype beim Serialisieren eines Dokuments zu rekonstruieren oder um XML-Dokumente mit einer bestimmten DTD zu erkennen.
Rückgabewert
"", wenn keiner angegeben ist.Beispiele
Public Identifier der aktuellen Seite auslesen
const doctype = document.doctype;
if (doctype) {
console.log(`Name: ${doctype.name}`);
console.log(`publicId: "${doctype.publicId}"`);
} else {
console.log('Kein Doctype vorhanden (Quirks-Modus wahrscheinlich)');
}
Veraltete Doctypes erkennen
const legacyIds = [
'-//W3C//DTD HTML 4.01//EN',
'-//W3C//DTD HTML 4.01 Transitional//EN',
'-//W3C//DTD XHTML 1.0 Strict//EN',
'-//W3C//DTD XHTML 1.0 Transitional//EN'
];
const checkDoctype = (doc) => {
const dt = doc.doctype;
if (!dt) return 'fehlt';
if (dt.publicId === '') return 'HTML5';
return legacyIds.includes(dt.publicId) ? `veraltet (${dt.publicId})` : `unbekannt (${dt.publicId})`;
};
console.log(checkDoctype(document));
Doctype selbst erzeugen und serialisieren
const dt = document.implementation.createDocumentType(
'html',
'-//W3C//DTD XHTML 1.0 Strict//EN',
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'
);
console.log(dt.publicId);
console.log(new XMLSerializer().serializeToString(dt));
// Wichtig · Fallstricke
- Leerer String statt
null: Fehlt der Public Identifier (z. B. bei<!DOCTYPE html>), ist der Wert"". Prüfen Sie daher mit=== ''und nicht mit=== null. document.doctypekannnullsein: Ohne Doctype-Deklaration gibt es keinDocumentType-Objekt; ein direkter Zugriff aufdocument.doctype.publicIdwirft dann einenTypeError. Verwenden Sie Optional Chaining:document.doctype?.publicId.- Schreibgeschützt: Zuweisungen werden ignoriert (im Strict Mode kommt es zu einem
TypeError). Einen anderen Doctype erhalten Sie nur, indem Sie mitdocument.implementation.createDocumentType()einen neuen Knoten erzeugen und den alten ersetzen – das Umschalten des Rendermodus (Quirks/Standards) erfolgt dadurch aber nicht nachträglich. - Den Rendermodus sollten Sie besser über
document.compatModeprüfen, statt diepublicIdselbst auszuwerten. - Kompatibilität: wird von allen modernen Browsern und von DOM-Implementierungen wie jsdom unterstützt.