在JavaScript中解析通过AJAX检索的HTML
我正在尝试编写一些JavaScript代码(特别是一个Chrome扩展),它可以执行以下操作:在JavaScript中解析通过AJAX检索的HTML,javascript,html,ajax,Javascript,Html,Ajax,我正在尝试编写一些JavaScript代码(特别是一个Chrome扩展),它可以执行以下操作: 通过AJAX检索某些网页的内容 通过定位HTML字符串中的某些元素并获取它们的内容,从该页面获取一些内容 用这些数据做点什么 我有1)和3)项工作,但我在以合理的方式完成第2)步时遇到了一些困难 我目前有2)通过jQuery(htmlString)实现,然后使用普通的jQuery选择器等来提取我想要的数据。问题是jQuery实际上将检索到的HTML添加到当前页面,加载并执行过程中的所有外部资源/脚本。
jQuery(htmlString)
实现,然后使用普通的jQuery选择器等来提取我想要的数据。问题是jQuery实际上将检索到的HTML添加到当前页面,加载并执行过程中的所有外部资源/脚本。这显然很糟糕
因此,我正在寻找一种方法来获取HTML字符串中某些标记中的文本和HTML,而不需要:
- 加载或执行HTML字符串中引用的任何脚本或资源(图像、CSS等)
- 尝试使用正则表达式删除外部资源,因为我们都知道当您使用正则表达式时会发生什么
FetchExternalResources
选项,可以设置为false
。然而,jsdom似乎只在NodeJ中工作,而不在浏览器中工作
有什么合理的方法可以做到这一点吗?您可以使用
这是一项实验技术
因为这项技术
规格尚未稳定,请检查兼容性表中的
在各种浏览器中使用的正确前缀。还请注意
实验技术的语法和行为可能会发生变化
在未来版本的浏览器中,随着规范的更改
在
你也可以看看和
使用XMLHttpRequest的示例
XMLHttpRequest最初只支持XML解析。HTML解析
支持是最近增加的
在上,您可以使用
这是一项实验技术
因为这项技术
规格尚未稳定,请检查兼容性表中的
在各种浏览器中使用的正确前缀。还请注意
实验技术的语法和行为可能会发生变化
在未来版本的浏览器中,随着规范的更改
在
你也可以看看和
使用XMLHttpRequest的示例
XMLHttpRequest最初只支持XML解析。HTML解析
支持是最近增加的
在上,您可以使用
这是一项实验技术
因为这项技术
规格尚未稳定,请检查兼容性表中的
在各种浏览器中使用的正确前缀。还请注意
实验技术的语法和行为可能会发生变化
在未来版本的浏览器中,随着规范的更改
在
你也可以看看和
使用XMLHttpRequest的示例
XMLHttpRequest最初只支持XML解析。HTML解析
支持是最近增加的
在上,您可以使用
这是一项实验技术
因为这项技术
规格尚未稳定,请检查兼容性表中的
在各种浏览器中使用的正确前缀。还请注意
实验技术的语法和行为可能会发生变化
在未来版本的浏览器中,随着规范的更改
在
你也可以看看和
使用XMLHttpRequest的示例
XMLHttpRequest最初只支持XML解析。HTML解析
支持是最近增加的
在上,您看过jQuery.parseHTML()了吗?看见它看起来会完全满足您的需要。
jQuery.parseHTML
仍然尝试加载外部图像等,而且它不执行脚本的尝试也受到了轻微的阻碍——从文档中可以看出:“但是,在大多数环境中,仍然可以间接执行脚本,例如通过属性。”哦,是的,你是对的。您能保证远程资源是XHTML吗?如果是这样,也许可以使用parseXML来解析它。如果没有,我就没有主意了。你看过jQuery.parseHTML()了吗?看见它看起来会完全满足您的需要。jQuery.parseHTML
仍然尝试加载外部图像等,而且它不执行脚本的尝试也受到了轻微的阻碍——从文档中可以看出:“但是,在大多数环境中,仍然可以间接执行脚本,例如通过属性。”哦,是的,你是对的。您能保证远程资源是XHTML吗?如果是这样,也许可以使用parseXML来解析它。如果没有,我就没有主意了。你看过jQuery.parseHTML()了吗?看见它看起来会完全满足您的需要。jQuery.parseHTML
仍然尝试加载外部图像等,而且它不执行脚本的尝试也受到了轻微的阻碍——从文档中可以看出:“但是,在大多数环境中,仍然可以间接执行脚本,例如通过属性。”哦,是的,你是对的。您能保证远程资源是XHTML吗?如果是这样,也许可以使用parseXML来解析它。如果没有,我就没有主意了。你看过jQuery.parseHTML()了吗?看见它看起来会完全满足您的需要。jQuery.parseHTML
仍然尝试加载外部图像等,而且它不执行脚本的尝试也受到了轻微的阻碍——从文档中可以看出:“但是,在大多数环境中,仍然可以间接执行脚本,例如通过属性。”哦,是的,你是对的。您能保证远程资源是XHTML吗?如果是这样,也许可以使用parseXML来解析它。如果没有,我就没有主意了。
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 4.0 (2.0) [1] 9.0 (Yes) (Yes)
[1] The title parameter has only been made option in Firefox 23.
$.ajax("http://www.html5rocks.com/en/tutorials/").done(function (htmlString) {
var doc = document.implementation.createHTMLDocument("");
doc.write(htmlString);
console.log(doc.getElementById('siteheader').textContent);
});
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support 18 11 10 --- Not supported
var xhr = new XMLHttpRequest();
xhr.onload = function () {
console.log(this.responseXML.getElementById('siteheader').textContent);
};
xhr.open("GET", "http://www.html5rocks.com/en/tutorials/");
xhr.responseType = "document";
xhr.send();