在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");