2017-06-12 198 views
1

我和一个朋友正在学习jQuery,我们遇到了一个我们无法弄清楚的问题。我们试图使用WhateverOrigin来从论坛中获取一些数据(我们有权从拥有者那里获得这些数据,他为我们设置了一个测试帖子来练习抓取)。我们正在处理的HTML是这样的:jQuery .text()返回空字符串和.html()返回“undefined”使用whateverorigin

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

使用WhateverOrigin,我们可以成功地利用

$.getJSON('http://www.whateverorigin.org/get?url=' + encodeURIComponent('[INSERT URL HERE]') + '&callback=?', function(data){ 
    alert(data.contents); 
}); 

然而,拉动网站的完整HTML,当我们试图把特定元素的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()); 
    }); 
}); 

什么想法?

感谢

回答

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()); 
+0

工作,谢谢你这么多! – Josh

+0

不客气,很高兴帮助。 –

0

使用$( “#msg_68一”),您选择从DOM元素。该元素不在DOM中,它在存储在从Ajax获取数据之后的变量中。要选择它,你必须先将数据从ajax插入到DOM中。您的选择是 “过滤器” 功能或 '数据' 变量范围内搜索(具体取决于您的jQuery版本)

选项1:

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

选项2:

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

我仍然收回一个空字符串和undefined,即使在把tha t in。还有其他想法吗? – Josh

+0

@Josh,你在数据输出中究竟得到了什么? –

+0

我从.html()调用中获得.text()调用和“undefined”的空警报 – Josh