Как разобрать HTML из JavaScript в Firefox? - PullRequest
13 голосов
/ 20 мая 2009

Каков наилучший способ анализа (получения дерева DOM) HTML-результата XmlHttpRequest в Firefox?

РЕДАКТИРОВАТЬ:

У меня нет дерева DOM, я хочу его приобрести.

«responseXML» XmlHttpRequest работает только тогда, когда результатом является фактический XML, поэтому у меня есть только responseText для работы.

Кажется, что взломанный innerHTML не работает с полным документом HTML (в ). - оказывается, он работает нормально.

Ответы [ 5 ]

20 голосов
/ 20 мая 2009

innerHTML должно работать нормально, например,

// This would be after the Ajax request:
var myHTML = XHR.responseText;
var tempDiv = document.createElement('div');
tempDiv.innerHTML = myHTML.replace(/<script(.|\s)*?\/script>/g, '');

// tempDiv now has a DOM structure:
tempDiv.childNodes;
tempDiv.getElementsByTagName('a'); // etc. etc.
3 голосов
/ 07 января 2012

По крайней мере, для более новых версий Firefox, более простой способ будет или скоро будет доступен.

https://developer.mozilla.org/en/HTML_in_XMLHttpRequest указывает, что начиная с FF11 можно будет запрашивать DOM непосредственно из XHR, установив атрибут responseType в "document". В этот момент HTML будет проанализирован, и DOM застрянет в responseXML, как для XML-документа.

2 голосов
/ 10 октября 2013

Вы можете использовать DOMParser для разбора HTML - даже тег супа:

var parser = new DOMParser()
parser.parseFromString('<!DOCTYPE html><html><head><title>hi</title></head><body><p>hello<b>world</b></p>', 'text/html')

Я не знаю, хорошо ли он обрабатывает частичную разметку таблицы, но он должен создать тот же DOM, который сам браузер делает для практически любой разметки.

1 голос
/ 20 мая 2009

Если ваши данные в формате XHTML, поэтому это действительный XML, то DOMParser (Mozilla) или loadXML (IE) могут помочь. Если нет, то я не могу придумать ничего лучше, чем удалить и затем передать его в innerHtml.

См. 21.1.3 в Руководстве Javascript Фланагана (5-е издание).

Colin

1 голос
/ 20 мая 2009

Цикл свойства responseXML объекта XMLHttpRequest. Кроме того, если вы используете innerHTML для добавления responseText ответа в формате HTML, браузер проанализирует текст и соберет его в DOM, прежде чем даже добавить его в поток документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...