I'm am working with an app that uses both jQuery and underscore.js . I'd like to be able to use some of underscore's iterator functions, such as any()
and all()
over a collection of jQuery objects. is there a way to do this? I'd like to do something similar to the following:
checkboxes = $("input[type=checkbox]"); _.filter(checkboxes, function(box) { return box.is(":checked"); });
but this throws an error:
Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'
so I'm assuming box in this context isn't acting like as a jQuery object.
You have to wrap box
in jQuery:
checkboxes = $("input[type=checkbox]"); checkboxes = _.filter(checkboxes, function(box) { return $(box).is(":checked"); });
Also, instead of creating a new object for every single element in the collection, you could just use the native box.checked
:
checkboxes = $("input[type=checkbox]"); checkboxes = _.filter(checkboxes, function(box) { return box.checked; });
On a side note: jQuery has its own filter method:
checkboxes = $("input[type=checkbox]").filter(function() { return $(this).is(":checked"); });
Furthermore, in your example - are you sure you have to filter? You could just as easily use that as your selector:
checkboxes = $("input[type=checkbox]:checked")
Here box
is a HTMLInputElement
type object. Its not a jQuery object. As .is
is a jQuery object method, you need jQuery object from box
.
It can be just done by, $(box)
. Then apply .is()
.
$(box).is(":checked");