2012-01-10 6 views
6

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

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

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

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

ので、私は、このコンテキストでのボックスを仮定しているjQueryオブジェクトとしてのような演技されていません。

+1

'$(" input [type = checkbox]:checked ")'を実行するだけの理由はありませんか? – Esailija

+0

この場合、私はこれを行うことができましたが、_.any()、_.all()など、すべてのアンダースコアインタラクションメソッドについて尋ねていました。 – GSto

+2

jQueryを使用することはほとんどありません。例えば、あなたは 'return box.checked'をちょうど実行できました。 – Esailija

答えて

13

あなたはjQueryのでboxラップする必要があります。代わりに、コレクション内のすべての単一の要素の新しいオブジェクトを作成する、あなただけのネイティブbox.checkedを使用することができ、また

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

を:

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

サイドノート:jQuery has its own filter method

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

また、あなたの例では、フィルタリングする必要がありますか?あなたは同じように簡単にあなたのセレクタとしてことを使用することができます。

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

フィルタはほんの一例に過ぎませんでした。私はまた、_.any、_.allなどをいくつかの状況で使用することを考えました。 – GSto

+0

@Joseph、ありがとう - これは私を助けた。 「あなたはjQueryでボックスをラップする必要があります」という理由を説明してください。 –

+0

@KevinMeredith - jQueryコレクションを繰り返すたびに、個々の項目は単純なバニラDOM要素です。 jQueryの機能を利用するには、新しいjQueryインスタンスを作成する必要があります。 –

1

ここboxHTMLInputElement型オブジェクトです。そのjQueryオブジェクトではありません。 .isはjQueryオブジェクトメソッドなので、boxからjQueryオブジェクトが必要です。

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

$(box).is(":checked"); 
関連する問題