如何在Firefox中从JavaScript解析HTML?

如何在Firefox中从JavaScript解析HTML?,javascript,ajax,firefox,dom,Javascript,Ajax,Firefox,Dom,在Firefox中解析(获取)XmlHttpRequest的HTML结果的最佳方法是什么 编辑: 我没有DOM树,我想获取它 XmlHttpRequest的“responseXML”仅在结果为实际XML时有效,因此我只有responseText可使用 innerHTML黑客似乎无法处理完整的HTML文档(in)结果表明它工作正常。循环XMLHttpRequest对象的responseXML属性。此外,如果您使用innerHTML附加HTML格式响应的responseText,浏览器将解析文本并在

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

编辑:

我没有DOM树,我想获取它

XmlHttpRequest的“responseXML”仅在结果为实际XML时有效,因此我只有responseText可使用


innerHTML黑客似乎无法处理完整的HTML文档(in)结果表明它工作正常。

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

如果您的数据是XHTML,因此是有效的XML,则DOMParser(Mozilla)或loadXML(IE)可能会有所帮助。如果没有,我想不出比剥离和然后将其传递给a的innerHtml更好的方法了

请参阅Flanagan的Javascript指南(第5版)中的21.1.3


Colin应该可以正常工作,例如

// 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.
//这将在Ajax请求之后:
var myHTML=XHR.responseText;
var tempDiv=document.createElement('div');
tempDiv.innerHTML=myHTML.replace(//g',);
//tempDiv现在有一个DOM结构:
tempDiv.childNodes;
tempDiv.getElementsByTagName('a');//等等等等。

至少对于较新的Firefox版本,一种更简单的方法已经或即将推出


指示从FF11开始,通过将
responseType
属性设置为
“document”
,可以直接从XHR请求DOM。在这一点上,HTML将被解析,DOM将被粘贴到XML文档的
responseXML
中。

您可以使用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')
var parser=new DOMParser()
parser.parseFromString('hihelloworld

','text/html')

我不知道它是否能很好地处理部分表标记,但它应该创建与浏览器本身对几乎所有标记所做的相同的DOM。

看起来这是我能做的最好的了。谢谢你关于s的提示。如果你担心s被执行,那么你还需要担心其他技巧,比如脚本是大写的,或者一个空字节在单词等的部分出现。但是您真的需要担心正在执行的脚本吗?根据本页:-您不需要担心通过innerHTML添加时正在执行的脚本块:“通过innerHTML插入的脚本块不会在NS6以外的任何浏览器中执行”-虽然这是2006年写的。如果要解析的文档myHTML是一个以…开头的完整HTML文档呢。。。?将其作为div的innerHTML没有多大意义,是吗?即使当前的浏览器能够忽略一些标记,以获得一个合适的替代品来替代div的innerHTML,对我来说,这听起来并不是一个干净的解决方案。对于“test”来说,这失败了,它只对divbrowser正确地解析纯html代码,因为它们是存在的。但令人遗憾的是,没有一种简单、标准的方法可以调用浏览器的解析器从html字符串生成HTMLDocument对象。。。