Конечно, вы можете сгенерировать узел , вам просто нужно использовать метод document.implementation.createDocumentType()
.
Однако создание документа HTML5 является довольно обременительным (по крайней мере, когда дело доходит до строкового преобразования). Действительно, нет пространства имен HTML5, и ваш документ HTML5 на самом деле является XHTML, когда-то анализируемым в DOM:
console.log(document.documentElement.namespaceURI);
Таким образом, когда вы зафиксируете этот документ, у вас будут атрибуты xmlns="http://www.w3.org/1999/xhtml"
для всех ваших элементов.
Чтобы избежать этого, вам действительно нужно сгенерировать все ваши элементы с пространством имен null
:
// Our <!DOCTYPE html> node
const doctype = document.implementation.createDocumentType('html', '', '');
// A new HTML5 document
const doc = document.implementation.createDocument("", 'html', doctype);
// We need to force null NS
const body = doc.createElementNS(null, 'body');
body.appendChild(doc.createTextNode('hello'));
doc.documentElement.appendChild(body);
const str = (new XMLSerializer).serializeToString(doc);
console.log(str);