Signatur
Beschreibung
DocumentType.remove() entfernt den DocumentType-Knoten, also die Doctype-Deklaration wie <!DOCTYPE html>, aus dem Baum seines Elternknotens. Die Methode kommt aus dem ChildNode-Mixin, das auch Element und CharacterData einbinden. Deshalb funktioniert sie genauso wie Element.prototype.remove().
Nach dem Aufruf liefert document.doctype den Wert null. Der Knoten selbst bleibt als Objekt erhalten und lässt sich später wieder einfügen, zum Beispiel mit document.insertBefore(doctype, document.documentElement).
Wichtig: Das Entfernen des Doctypes zur Laufzeit ändert den Rendermodus des Dokuments nicht. document.compatMode behält seinen Wert, weil er schon beim Parsen festgelegt wird. Nützlich ist die Methode vor allem, wenn man Dokumente per Programm erzeugt oder umbaut, etwa mit DOMParser, document.implementation.createHTMLDocument() oder beim Serialisieren über XMLSerializer.
Hat der Knoten keinen Elternknoten, passiert beim Aufruf einfach nichts. Es wird kein Fehler geworfen.
Rückgabewert
undefined).Beispiele
Doctype des aktuellen Dokuments entfernen
const doctype = document.doctype;
console.log(doctype?.name); // "html"
doctype?.remove();
console.log(document.doctype); // null
// Der Rendermodus bleibt unverändert
console.log(document.compatMode);
Doctype vor dem Serialisieren eines geparsten Dokuments entfernen
const html = '<!DOCTYPE html><html><head><title>Test</title></head><body><p>Hallo</p></body></html>';
const doc = new DOMParser().parseFromString(html, 'text/html');
doc.doctype?.remove();
const serialisiert = new XMLSerializer().serializeToString(doc);
console.log(serialisiert.startsWith('<!DOCTYPE')); // false
Doctype entfernen und wieder einfügen
const doc = document.implementation.createHTMLDocument('Demo');
const dt = doc.doctype;
dt.remove();
console.log(doc.doctype); // null
// Denselben Knoten wieder vor das Wurzelelement setzen
doc.insertBefore(dt, doc.documentElement);
console.log(doc.doctype === dt); // true
Aufruf auf einem losgelösten Doctype ist ungefährlich
const dt = document.implementation.createDocumentType('svg', '-//W3C//DTD SVG 1.1//EN', 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
console.log(dt.parentNode); // null
dt.remove(); // kein Fehler, keine Wirkung
console.log('ok');
// Wichtig · Fallstricke
- Rendermodus bleibt: Ob der Browser im Quirks-Modus oder im Standardmodus arbeitet, wird beim Parsen festgelegt.
remove()zur Laufzeit ändert daran nichts.document.compatModebleibt gleich. - Optional Chaining nutzen:
document.doctypekannnullsein, etwa bei Dokumenten ohne Doctype.document.doctype.remove()würde dann einenTypeErrorwerfen. Besser istdocument.doctype?.remove(). - Kompatibilität: Wird in allen modernen Browsern unterstützt (Chrome 23+, Firefox 23+, Safari 7+, Edge). Im Internet Explorer fehlt die Methode. Dort funktioniert stattdessen
doctype.parentNode.removeChild(doctype). - Nicht abschaltbar: Die Methode ist über
Symbol.unscopablesgekennzeichnet und ist deshalb innerhalb vonwith-Blöcken nicht als freie Variable erreichbar.