我和朋友正在尝试学习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());
});
});
任何想法?
由于
答案 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);