Получение тела DOM из текста с использованием javascript - PullRequest
0 голосов
/ 08 февраля 2020

У меня проблемы с извлечением тела из javascript кода с использованием getElementsByTagName.

var enc1 = '<HEAD></HEAD><BODY>test</BODY>';
var wrapper = document.createElement('div');
wrapper.innerHTML = enc1;
var converted = wrapper.getElementsByTagName("body");
var res = "Body of text: " + converted;

document.getElementById("demo").innerHTML = res;
<div id="demo"></div>

jsfiddle

, когда я использую конвертированный, я получаю [объект HTMLCollection]. Когда я использую преобразованный [0], я получаю неопределенное значение.

Что-то мне не хватает?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2020

<head> и <body> немного более особенные, чем ваши повседневные <div> с. Вы можете разместить их только в качестве прямых потомков <html>.

. Создание тега html, подобного этому, в настоящее время невозможно с createElement, вам нужно будет создать новый document и затем использовать его. чтобы получить доступ к свойству .body - .body.innerHTML, чтобы получить HTML.

В настоящее время единственными способами анализа всего HTML документов являются document.implementation.createHTMLDocument и DOMParser. DOMParser немного более свободен sh, поэтому я бы порекомендовал его использовать.

const enc1 = '<HEAD></HEAD><BODY>test</BODY>';
const newDocument = (new DOMParser).parseFromString(enc1, 'text/html');
const converted = newDocument.body.innerHTML;
const res = "Body of text: " + converted;

document.getElementById("demo").innerHTML = res;
<div id="demo"></div>
0 голосов
/ 08 февраля 2020

<body> теги никогда не должны быть внутри div. Вы можете просто сделать это, чтобы извлечь текст внутри тела:

const bodyText = document.body.innerHTML

0 голосов
/ 08 февраля 2020

Как говорит РобГ в своем комментарии, внутри тега div нельзя указывать тег head или body.

Большинство, если не все, браузеры будут писать только "test" в ваш div обертки.

Вы создали следующее с вашим кодом:

<div>test</div>

Таким образом, при попытке выполнить эту строку возникает ошибка:

var converted = wrapper.getElementsByTagName("body");

В вашем теге-обертке нет тега body, и поэтому преобразованный пустой HTMLCollection [].

...