Wikiページからデータを取得する作業をしています。私はこれを行うために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();
});
正常に画像を取得できましたが、変数entの場合、フィルターの代わりに検索を使用すると、空の配列が返されます。フィルターのみが機能しています。どうしてこれなの?
編集:検索とフィルターの基本的な違いを知っています。ここで、a.image img
とa.urlmax
はどちらもhdata
の子孫です。次に、findがa.urlmax
で機能しないのはなぜですか。 a.urlmax
だけでは、他のクラスやIDでは機能しません
.find() http://api.jquery.com/find/
セレクタ、jQueryオブジェクト、または要素でフィルタリングされた、一致する要素の現在のセットで各要素の子孫を取得します。
一方、フィルターは、現在一致している要素に対して機能します。そのため、フィルターは機能しましたが見つかりませんでした(現在の要素を確認する必要がありました)。
filter
は、選択した要素から要素のサブセットを選択します
find
は、選択した要素の子孫/子を選択します
より明確にするために、フィルターはすべての要素を検索しますが、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"});
結果:
特定の基準に一致する要素を返します。
上記と同じhtmlを使用:
$(".Cell").filter(".Plus").css({"color": "red", "border": "2px solid red"});
結果: