在jquery对象的集合上使用underscore.js列表函数

我正在使用一个同时使用jQuery和underscore.js的应用程序。 我希望能够在jQuery对象的集合中使用一些下划线的迭代器函数,例如any()all() 。 有没有办法做到这一点? 我想做类似以下的事情:

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

但这会引发错误:

 Uncaught TypeError: Object # has no method 'is' 

所以我假设在这个上下文中的框不像jQuery对象那样。

你必须在jQuery中包装box

 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是一个HTMLInputElement类型对象。 它不是一个jQuery对象。 由于.is是一个jQuery对象方法,你需要从box jQuery对象。

它可以通过$(box) 。 然后申请.is()

 $(box).is(":checked");