我正致力于从维基页面获取数据。我使用php
和jquery
的组合来执行此操作。首先,我在curl
中使用php
来获取页面内容并回显内容。文件名为content.php
:
$url = $_GET['url'];
$url = trim($url," ");
$url = urldecode($url);
$url = str_replace(" ","%20",$url);
echo "<a class='urlmax'>".$_GET['title']."</a>";
echo crawl($url);
然后jQuery
用于查找匹配的元素。
$.get("content.php",{url:"http://en.wikipedia.org/w/index.php?action=render&title="+str_replace(" ","_",data[x]),title:str_replace(" ","_",data[x])},function(hdata){
var imgs = $(hdata).find('a.image img');
var ent = $(hdata).filter('a.urlmax');
ent = $(ent[0]).text();
});
我能够成功获取图像但是当我使用find而不是filter时,它变量ent,它返回一个空数组。只有过滤器正常工作。这是为什么?
编辑:我知道find和filter之间的基本区别。这里a.image img
和a.urlmax
都是hdata
的后代。那么为什么find不适用于a.urlmax
。单独不a.urlmax
它不能处理任何其他类或ID
答案 0 :(得分:24)
.find() http://api.jquery.com/find/
另一方面,获取当前匹配元素集中的每个元素的后代,由选择器,jQuery对象或元素过滤。
过滤器适用于当前匹配的元素。这就是为什么过滤器工作但找不到(你需要查看当前元素)的原因。
答案 1 :(得分:19)
filter
将从所选元素
find
将选择所选元素的后代/子项
为了使其更清晰,过滤器将搜索所有元素,而find将仅在后代列表中搜索</ p>
答案 2 :(得分:0)
它将返回所选元素的后代元素。
示例(jsfiddle):
<style>
.Cell{
margin: 15px;
width: 400px;
border: 2px solid lightgrey;
}
.Cell * {
display: block;
border: 2px solid lightgrey;
color: lightgrey;
padding: 5px;
margin: 10px;
}
</style>
<div class='Cell Plus'>div (1)
<div class='Plus'>Child</div>
</div>
<div class='Cell Plus'>div (2)
<div class='Plus'>Child</div>
</div>
JS:
$(".Cell").find(".Plus").css({"color": "red", "border": "2px solid red"});
结果:
它将返回符合特定条件的元素。
使用与上面相同的html
$(".Cell").filter(".Plus").css({"color": "red", "border": "2px solid red"});
结果: