Me acabo de dar cuenta de que, de forma predeterminada, DOMParser.parseFromString() crea documentos en modo Quirks. ¿Hay alguna manera de convertirlo en modo estándar?
console.log(document.compatMode) // 'CSS1Compat' const doc = new DOMParser().parseFromString('<div>Hello World</div>', 'text/html'); console.log(doc.compatMode) // 'BackCompat'Parece que lo hará si proporciona el marcado HTML completo, incluido el tipo de documento estándar de <!DOCTYPE html> . Si solo le proporciona un fragmento HTML, como <div>Hello World</div> , en lugar de una página completa, el motor creará un tipo de documento circundante y <html> y <body> para usted, y asumirá el modo peculiar.
console.log(document.compatMode); const doc = new DOMParser().parseFromString(` <!DOCTYPE html> <html lang="en"> <body> <div>Hello World</div> </body> </html> `, 'text/html'); console.log(doc.compatMode);Todo lo que necesita hacer es anteponer <!DOCTYPE html> al HTML que está analizando
DOMParser dará como resultado el siguiente "documento"
<html> <head> </head> <body> <div>Hello World</div> </body> </html> console.log(document.compatMode) // 'CSS1Compat' const doc = new DOMParser().parseFromString('<!DOCTYPE html><div>Hello World</div>', 'text/html'); console.log(doc.compatMode) // 'BackCompat' console.log(doc.documentElement.outerHTML)