0

filter メソッドを使用して jQuery オブジェクトをフィルタリングしようとしていますが、期待する結果が得られません。これが私のコードです:

var $contents = $(".container");
var $spans = $contents.filter("span");

jQuery フィルター メソッドに関する私の理解に基づくと、これは次のようになります。

var $spans = $(".container span");

ただし、最初の例では $spans 変数に結果が返されませんが、2 番目の例では期待どおりの結果が返されます。

最初の例がコンテナー内のすべてのスパン要素のコレクションを返さない理由を誰か説明できますか?

問題を示すjsfiddleは次のとおりです。http://jsfiddle.net/w8Sf7/

4

4 に答える 4

1

これは、divタグを含むjQueryオブジェクトを作成しているためです。セットには選択されたスパン要素がないため、長さは0です。

あなたが欲しいのはfindまたはchildren方法です。

于 2012-10-26T19:15:33.480 に答える
1

これらは同等です:

$contents.filter("span")
$("span.container");

どちらもspan、クラスが。の要素を検索しますcontainer

次に、これらは同等です。

$contents.find("span");
$(".container span")

spanどちらも、クラスが。の要素に含まれているsを検索しますcontainer

于 2012-10-26T19:15:35.913 に答える
1

フィルター - 結果を除外するために使用されます

var $spans = $contents.filter("span"); // <-- filters out the span that are inside $contents collection

$(".container");したがって、フィルターはスパンである要素を探しています

あなたのフィルターは等しい

var $spans = $("span.container");

他のもの

var $spans = $(".container span.container"); // <-- gets descendant spans inside .container

spanしたがって、これはの派生要素を返します$(".container");

そう

var $spans = $(".container span") 

に等しい

var $spans = $(".container").find('span');

に等しい

var $spans = $('span',".container");
于 2012-10-26T19:14:39.833 に答える
1

.filter()選択された要素を調べます。その子孫ではありません。あなたの子孫を選択したい場合は<div class="container">、いくつかの方法で行うことができます。で行う方法は次のとおりfind()です。しかし、これはおそらく最も効率的な方法ではありません。

var $contents = $(".container");
$contents.find("*").filter("span");

これらはおそらくより効率的です。

$(".container span")
$contents.find("span")

また、子供が必要な場合は、次を使用できます。

$contents.children("span")

$(descendantsOfElement, element)セレクターもあります。しかし、これはコードのトラブルシューティング時に読みにくいと思うので、使用することはめったにありません。

于 2012-10-26T19:20:00.170 に答える