【问题标题】:Convert GET HTML response into document将 GET HTML 响应转换为文档
【发布时间】:2017-08-25 23:50:15
【问题描述】:

我正在开发一个读取另一个页面源的页面,我需要从该页面中提取某些信息。我目前的项目使用数据来获取实时源,但是我一生都无法弄清楚如何将此字符串转换为文档。

我使用文档的理由是我需要使用getElementById 等来获取这些项目的价值。

我尝试了什么?

  1. 将 HTML 分配给我页面上的不可见 div。这种工作虽然不呈现整个 HTML 字符串并提供此页面的“更短”的再现。

  2. 手动查找子字符串。正如您可以想象的那样,这是一种糟糕的做事方式,并且提供的结果非常不可靠。

  3. DOM 解析器转换文档,然后查询它,但失败得很惨。

我们将不胜感激任何帮助。

相关代码:

$.ajax({
  method: "GET",
  dataType: '',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  },
  success: function(res) {
    //shows the entire source just fine.
    console.log("Value of RES: " + res);
    bootbox.hideAll();
    //shows a "truncated" copy of the source
    alert(res);
    $("#hiddendiv").html(x);
    var name = document.findElementById("myitem");
    alert(name);
  },

【问题讨论】:

  • 你试过用 Cheerio 解析你的 HTML 字符串吗?
  • @PatrickHund 我没有,但是这里的问题是这个页面是一个独立的页面,将在本地分发。
  • 据我了解,您有一个包含要解析的 HTML 代码的字符串,并运行查询以提取数据。这正是 Cheerio 的用途
  • 这正是我所需要的。我将进一步研究 Cheerio,看看我是否可以做到这一点。
  • 好吧,您显示的代码不起作用,因为您从未定义 x。您还使用了findElementById,它不是document 的函数。

标签: javascript jquery html ajax


【解决方案1】:

在您的文档上创建一个隐藏的 IFRAME。然后将该 IFRAME 的内容设置为您要查询的 HTML。当您进行查询时,使用您的 javascript 定位该 IFRAME。请参阅How can I access iframe elements with Javascript? 了解如何操作。

【讨论】:

    【解决方案2】:

    另一个(可能更好)的选择是使用 jQuery。 jQuery 允许您创建 HTML、对其进行操作并在内存中对其进行查询。在 jQuery 中查询 DOM 元素甚至比在纯 javascript 中更容易。请参阅:http://jquery.com/

    //Get a jQuery object representing your HTML
    var $html = $( "<div><span id='label'></span></div>" );
    
    //Query against it
    var $label = $html.find( "#label" ); //finds the span with and id of 'label'
    

    【讨论】:

    • 问题被标记为jquery,他们使用$.ajax.html()。很确定他们知道 jQuery。
    • @MikeMcCaughan 对,我知道他们已经在使用 jQuery。我要指出的是,他们可以进一步使用它来解决他们的问题。与其试图将 HTML 放入浏览器的文档中以便查询,不如获取字符串 HTML,将其转换为 jQuery 对象,然后直接在内存中查询。性能更好,并且在浏览器中查看页面时不会向页面引入任何问题。
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多