28

我正在从 wiki 页面获取数据。我正在使用php和的组合jquery来做到这一点。首先,我使用curlinphp来获取页面内容并回显内容。文件名是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();


});

我能够成功获取图像,但是对于变量 ent 当我使用 find 而不是 filter 时,它返回一个空数组。只有过滤器在工作。为什么是这样?

编辑:我知道查找和过滤之间的基本区别。这里a.image imga.urlmax都是 的后代hdata。那为什么 find 不起作用a.urlmax。不仅a.urlmax如此,它不适用于任何其他类或 id

4

3 回答 3

31

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

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

另一方面,过滤器适用于当前匹配的元素。这就是为什么 filter 有效但 find 无效(您需要查看当前元素)。

于 2012-04-30T05:12:40.777 回答
22

filter将从所选元素中选择元素的子集

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

为了更清楚, filter 将搜索所有元素,而 find 将仅在后代列表中搜索

于 2012-04-30T05:12:40.457 回答
3

。寻找()

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

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

结果:

筛选结果

于 2019-11-14T12:52:37.213 回答