jqueryオブジェクトのコレクションにunderscore.jsリスト関数を使用します

StackOverflow https://stackoverflow.com/questions/8809985

質問

私はjqueryとunderscore.jsの両方を使用するアプリで作業しています。アンダースコアの反復関数のいくつかを使用できるようにしたいと思います。 any()all() jQueryオブジェクトのコレクションを介して。これを行う方法はありますか?次のようなことをしたい:

checkboxes = $("input[type=checkbox]");
_.filter(checkboxes, function(box) {
    return box.is(":checked");
});

しかし、これはエラーをスローします:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'

したがって、この文脈でボックスはjQueryオブジェクトのように振る舞っていないと仮定しています。

役に立ちましたか?

解決

あなたは包む必要があります box jquery:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return $(box).is(":checked");
});

また、コレクション内のすべての要素に新しいオブジェクトを作成する代わりに、ネイティブを使用することができます box.checked:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return box.checked;
});

サイドノート: jQueryには独自のフィルターメソッドがあります:

checkboxes = $("input[type=checkbox]").filter(function() {
    return $(this).is(":checked");
});

さらに、あなたの例では、フィルタリングする必要がありますか?それをセレクターと同じくらい簡単に使用できます。

checkboxes = $("input[type=checkbox]:checked")

他のヒント

ここ box aです HTMLInputElement タイプオブジェクト。それはjQueryオブジェクトではありません。として .is jQueryオブジェクト方法です。 box.

それはちょうど行うことができます、 $(box). 。次に、適用します .is().

$(box).is(":checked");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top