Создать новый HTML-документ, включая Doctype

Если я сделаю:

let html = `<!DOCTYPE html>
<html>
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>`;

let newHTMLDocument = document.implementation.createHTMLDocument().documentElement;

newHTMLDocument.innerHTML = html;

console.info( newHTMLDocument );

Результат:

<html>
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>

Почему не включен тег doctype? Что мне нужно сделать, чтобы при выводе newHTMLDocument он включал тег doctype?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
893
2

Ответы 2

.documentElement возвращает элемент <html> (элемент в корне документа - - <!doctype> не является элементом, это узел декларации), поэтому вы исключаете doctype самостоятельно.

Если избавиться от .documentElement, doctype останется.

let html = `<!doctype html>
  <html>
    <head>
        <title>Hello, world!</title>
    </head>
    <body>
        <p>Hello, world!</p>
    </body>
</html>`;

let newHTMLDocument = document.implementation.createHTMLDocument();
newHTMLDocument.innerHTML = html;

// You can access the doctype as an object:
console.info("The <!doctype> is a node type of: " +newHTMLDocument.doctype.nodeType,
            "\nWhile the documentElement is a node type of: " + newHTMLDocument.documentElement.nodeType);
console.info(newHTMLDocument.doctype);

alert(newHTMLDocument.innerHTML);

Я пробовал ваш код, но если я сделаю console.info (newHTMLDocument); он не содержит моих элементов, тега заголовка и тега p. Мне нужны все мои элементы в объекте, потому что я собираюсь использовать некоторые функции JS DOM для объекта.

GTS Joe 25.03.2018 04:13

@GTSJoe newHTMLDocumemt - это объект, вы не регистрируете его напрямую. Мой код регистрирует это .innerHTML. Вы можете получить любое его содержимое, например, с помощью newHTMLDocument.querySelector ().

Scott Marcus 25.03.2018 04:34

Для справки, в итоге я использовал следующий ответ: stackoverflow.com/questions/8227612/…, который использует createHTMLDocument doc.open (); doc.write (HTML); doc.close (); создать объект HTML

GTS Joe 25.03.2018 04:48

Вы также можете использовать createDocumentType() с createHTMLDocument() или createDocument():

const doc = document.implementation.createHTMLDocument('title');
console.info('before', new XMLSerializer().serializeToString(doc));

const docType = document.implementation.createDocumentType('qualifiedNameStr', 'publicId', 'systemId');
doc.doctype.replaceWith(docType);
console.info('after', new XMLSerializer().serializeToString(doc));

Другие вопросы по теме