2011-07-29 10 views
3

grepがオプションのセレクタ引数で動作しないことは奇妙に思えます.GREPを呼び出す既存の方法はJQueryの規約外にあるようです。言い換えれば、これは動作します:

$.grep($('div'), function(div) { return div.className == 'section' }); 

これにはない:

さらに
$('div').grep(function(div) { return div.className == 'section' }); 

、それはタグのリストを検索することがトリッキーになり、こののために - それは動作しますが、コードの最初の行を、 .css()などを呼び出すことができる素敵な連鎖可能なJQueryオブジェクトではなく、フラットな配列を返します。

JQueryでgrepがこのように動作する理由はありますか?

答えて

3

あなたが探している機能は、$.fn.filter()という2番目の(コールバック)バリアントです。

それは$.grepとほとんど同じように動作しますが、jQueryオブジェクトに作用し、コールバック関数からtrueを返された要素、例えばのすべてのjQueryオブジェクトを返します。

$('div') 
.filter(function() { 
    return this.className == 'section' 
}) 
.css(...) ; 
+0

をコレクションのひとつ、彼らは同じことを行うことを奇妙に思えますのタグと配列のためのもう1つ。両方に同じ名前を使用することには害はありません。プレーンな配列をフィルタリングするのか、タグの選択をするのかによって、実際には異なる名前を使用する必要があるのは混乱していると主張します。 –

0

私は​​を信じますjQuery.inArray()array.indexOfの実装を提供する方法と同様に、array.Filterの実装であることを意味します。したがって、他のjQueryメソッドの規約に従わない。

誰かが指摘したように、あなたがしようとしているもののためにfilter()が存在します。

0

$.grepの方法は、アレイと共に使用することを目的としたutility methodsの1つです。同じパターンに続く他の方法、たとえば$.each,$.map,$.inArrayおよび$.mergeがあります。

メソッドに対応するtraversing methodsを参照する必要がある要素コレクションで動作するメソッドを使用する場合は、filter methodとなります。あなたは要素の配列を持って起こる場合


また、あなたが簡単にjQueryオブジェクトにそれらを置くことができます。

$($.grep($('div'), function(div) { return div.className == 'section' })) 
関連する問題