Невозможно создать элемент шаблона и проанализировать с ним разметку полного HTML-документа.
const template = document.createElement('template');
template.insertAdjacentHTML('beforeend', '<html></html>');
Этот фрагмент даст DocumentFragment []
.Использование полной разметки дает только все элементы ниже элемента head
или body
.Другими словами: элементы html
, head
и body
извлекаются из фрагмента документа.
Это неожиданно, состояния MDN :
Разрешенный контент: без ограничений
Ниже приведен обходной путь для этой проблемы.htmlElement
содержит то, что, как я ожидал, template.content
будет содержать при подаче полной разметки.
const htmlElement = document.createElement('html');
const headElement = document.createElement('head');
headElement.insertAdjacentHTML('beforeend', headMarkup);
htmlElement.appendChild(headElement);
const bodyElement = document.createElement('body');
bodyElement.insertAdjacentHTML('beforeend', bodyMarkup);
htmlElement.appendChild(bodyElement);
Можно ли каким-либо образом создать фрагмент / элемент документа, содержащий полный документ, который не прикреплен кDOM?
Примечание. Мой вариант использования - присоединение теневого DOM, содержащего полный HTML-документ, к узлу существующего документа.