如何在Firefox中解析JavaScript中的HTML?

时间:2009-05-20 16:14:34

标签: javascript ajax firefox dom

在Firefox中解析(获取DOM树)XmlHttpRequest的HTML结果的最佳方法是什么?

编辑:

拥有DOM树,我想获得它。

XmlHttpRequest的“responseXML”仅在结果为实际XML时才有效,所以我只有responseText才能使用。

innerHTML黑客似乎无法使用完整的HTML文档(在< html>< / html>中)。 - 结果证明它工作正常。

5 个答案:

答案 0 :(得分:20)

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.

答案 1 :(得分:3)

至少对于较新的Firefox版本,可以或即将推出更简单的方法。

https://developer.mozilla.org/en/HTML_in_XMLHttpRequest表示从FF11开始,可以通过将responseType属性设置为"document"直接从XHR请求DOM。此时,对于XML文档,将解析HTML并将DOM插入responseXML

答案 2 :(得分:2)

您可以使用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,几乎可以用于任何标记。

答案 3 :(得分:1)

循环XMLHttpRequest对象的responseXML属性。此外,如果您使用innerHTML附加HTML格式响应的responseText,浏览器将解析文本并在DOM中将其组合在一起,甚至将其附加到文档流中。

答案 4 :(得分:1)

如果您的数据是XHTML,那么它是有效的XML,那么DOMParser(Mozilla)或loadXML(IE)可能会有所帮助。如果没有,我想不出什么比剥离它然后将它传递给内部HTML更好。

参见Flanagan的Javascript指南(第5版)中的21.1.3。

科林