在Firefox中解析(获取DOM树)XmlHttpRequest的HTML结果的最佳方法是什么?
编辑:
我不拥有DOM树,我想获得它。
XmlHttpRequest的“responseXML”仅在结果为实际XML时才有效,所以我只有responseText才能使用。
innerHTML黑客似乎无法使用完整的HTML文档(在< html>< / html>中)。 - 结果证明它工作正常。
答案 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。
科林