jquery中查找和过滤器之间的区别

时间:2012-04-30 05:07:32

标签: jquery find web-crawler

我正致力于从维基页面获取数据。我使用phpjquery的组合来执行此操作。首先,我在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 imga.urlmax都是hdata的后代。那么为什么find不适用于a.urlmax。单独不a.urlmax它不能处理任何其他类或ID

3 个答案:

答案 0 :(得分:24)

.find() http://api.jquery.com/find/

  

获取当前匹配元素集中的每个元素的后代,由选择器,jQuery对象或元素过滤。

另一方面,

过滤器适用于当前匹配的元素。这就是为什么过滤器工作但找不到(你需要查看当前元素)的原因。

答案 1 :(得分:19)

filter将从所选元素

中选择元素的子集

find将选择所选元素的后代/子项

为了使其更清晰,过滤器将搜索所有元素,而find将仅在后代列表中搜索<​​/ p>

答案 2 :(得分:0)

.find()

它将返回所选元素的后代元素。

示例(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"});

结果:

Find result


.filter()

它将返回符合特定条件的元素。

使用与上面相同的html

$(".Cell").filter(".Plus").css({"color": "red", "border": "2px solid red"});

结果:

Filter result