Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中解析通过AJAX检索的HTML_Javascript_Html_Ajax - Fatal编程技术网

在JavaScript中解析通过AJAX检索的HTML

在JavaScript中解析通过AJAX检索的HTML,javascript,html,ajax,Javascript,Html,Ajax,我正在尝试编写一些JavaScript代码(特别是一个Chrome扩展),它可以执行以下操作: 通过AJAX检索某些网页的内容 通过定位HTML字符串中的某些元素并获取它们的内容,从该页面获取一些内容 用这些数据做点什么 我有1)和3)项工作,但我在以合理的方式完成第2)步时遇到了一些困难 我目前有2)通过jQuery(htmlString)实现,然后使用普通的jQuery选择器等来提取我想要的数据。问题是jQuery实际上将检索到的HTML添加到当前页面,加载并执行过程中的所有外部资源/脚本。

我正在尝试编写一些JavaScript代码(特别是一个Chrome扩展),它可以执行以下操作:

  • 通过AJAX检索某些网页的内容
  • 通过定位HTML字符串中的某些元素并获取它们的内容,从该页面获取一些内容
  • 用这些数据做点什么
  • 我有1)和3)项工作,但我在以合理的方式完成第2)步时遇到了一些困难

    我目前有2)通过
    jQuery(htmlString)
    实现,然后使用普通的jQuery选择器等来提取我想要的数据。问题是jQuery实际上将检索到的HTML添加到当前页面,加载并执行过程中的所有外部资源/脚本。这显然很糟糕

    因此,我正在寻找一种方法来获取HTML字符串中某些标记中的文本和HTML,而不需要:

    • 加载或执行HTML字符串中引用的任何脚本或资源(图像、CSS等)
    • 尝试使用正则表达式删除外部资源,因为我们都知道当您使用正则表达式时会发生什么
    我相信我可以使用jQuery实现我想要的,因为jsdom有一个
    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();