Start · Sprachen · JavaScript · Referenz · DocumentType.remove()

DocumentType.remove()

Methode

Entfernt den Doctype-Knoten (<code>&lt;!DOCTYPE …&gt;</code>) aus dem Dokument, zu dem er gehört.

seit JavaScript DOM Living Standard (ChildNode-Mixin) – Baseline: Kategorie: webapi

Signatur

DocumentType.prototype.remove()

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

Typ
void
Beschreibung
Kein 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);
html null CSS1Compat

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
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
null 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');
null 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.compatMode bleibt gleich.
  • Optional Chaining nutzen: document.doctype kann null sein, etwa bei Dokumenten ohne Doctype. document.doctype.remove() würde dann einen TypeError werfen. Besser ist document.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.unscopables gekennzeichnet und ist deshalb innerhalb von with-Blöcken nicht als freie Variable erreichbar.