web-dev-qa-db-ja.com

jqueryの検索とフィルターの違い

Wikiページからデータを取得する作業をしています。私はこれを行うためにphpjqueryの組み合わせを使用しています。まず、curlphpを使用してページのコンテンツを取得し、コンテンツをエコーし​​ます。ファイル名は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の場合、フィルターの代わりに検索を使用すると、空の配列が返されます。フィルターのみが機能しています。どうしてこれなの?

編集:検索とフィルターの基本的な違いを知っています。ここで、a.image imga.urlmaxはどちらもhdataの子孫です。次に、findがa.urlmaxで機能しないのはなぜですか。 a.urlmaxだけでは、他のクラスやIDでは機能しません

26
Krishna Deepak

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

セレクタ、jQueryオブジェクト、または要素でフィルタリングされた、一致する要素の現在のセットで各要素の子孫を取得します。

一方、フィルターは、現在一致している要素に対して機能します。そのため、フィルターは機能しましたが見つかりませんでした(現在の要素を確認する必要がありました)。

27
Jere

filterは、選択した要素から要素のサブセットを選択します

findは、選択した要素の子孫/子を選択します

より明確にするために、フィルターはすべての要素を検索しますが、findは子孫リストでのみ検索します

20
mprabhat

.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


。フィルタ()

特定の基準に一致する要素を返します。

上記と同じhtmlを使用:

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

結果:

Filter result

0