jQuery .text()返回空字符串和.html()使用whateverorigin返回“undefined”

时间:2017-06-12 09:43:29

标签: javascript jquery html

我和朋友正在尝试学习jQuery,我们遇到了一个我们无法弄清楚的问题。我们正在尝试使用WhateverOrigin来从论坛中搜集一些数据(我们已经获得了所有者的许可,他为我们设置了一个测试帖来练习抓取)。我们正在处理的HTML是:

<div>
  <span id="msg_68" class="subject_title">
    <a href="[insert link here]">TEST: SCRAPE THE URL</a>
  </span>
</div>

使用WhateverOrigin,我们可以使用

成功提取网站的完整HTML
$.getJSON('http://www.whateverorigin.org/get?url=' + encodeURIComponent('[INSERT URL HERE]') + '&callback=?', function(data){
    alert(data.contents);
});

但是,当我们尝试拉出特定元素的HTML或文本时(检查我们是否正在提取正确的数据),我们要么使用html“未定义”,要么使用带文本的“”。

我们使用的代码是:

$(document).ready(function(){
  $.getJSON('http://www.whateverorigin.org/get?url=' + encodeURIComponent('[INSERT URL HERE]') + '&callback=?', function(data){
      alert($("#msg_68 a").text());
      alert($("#msg_68 a").html());
  });
});

任何想法?

由于

2 个答案:

答案 0 :(得分:1)

当您编写$("#msg_68 a")时,您尝试从当前页面中的DOM访问此元素,而不是从加载的数据中访问。

您需要在#msg_68 a中选择data.contents元素,您可以:

将此数据解析为DOM元素,然后获取它以获取所需的元素:

$.getJSON('http://www.whateverorigin.org/get?url=' + encodeURIComponent('[INSERT URL HERE]') + '&callback=?', function(data){
    var div = $("<div><div/>");
    div.html(data.contents);
    alert($("#msg_68 a", div).text());
});

或者直接使用data.contents引用它,因为内容是有效的HTML:

alert($("#msg_68 a", data.contents).text());

答案 1 :(得分:0)

通过使用$(“#msg_68 a”),您正在从DOM中选择一个元素。该元素尚未在DOM中,它在从ajax获取数据后的那一刻存储在变量中。要像那样选择它,你必须首先将数据从ajax插入到DOM中。您的替代方案是“过滤器”功能或在“数据”变量上下文中搜索(取决于您的jquery版本)

选项1:

$(data.contents).filter('#msg_68 a');

选项2:

$("#msg_68 a", data.contents);