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

use underscore.js list functions on collection of jquery objects

本文关键字:underscore js 列表 函数 jquery 对象 集合      更新时间:2023-09-26

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

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

但这引发了一个错误:

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

所以我假设这个上下文中的box并不像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是一个HTMLInputElement类型的对象。它不是jQuery对象。由于.is是一个jQuery对象方法,因此需要box中的jQuery对象。

它可以通过$(box)来完成。然后应用.is()

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