Используйте функции списка.
-
26-10-2019 - |
Вопрос
Я работаю с приложением, которое использует как jQuery, так и подчеркивание. Я хотел бы иметь возможность использовать некоторые из функций итератора Underscore, таких как any()
а также all()
над коллекцией объектов jQuery. Есть ли способ сделать это? Я хотел бы сделать что -то похожее на следующее:
checkboxes = $("input[type=checkbox]");
_.filter(checkboxes, function(box) {
return box.is(":checked");
});
Но это бросает ошибку:
Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'
Так что я предполагаю, что коробка в этом контексте не действует как объект 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, вам нужен объект jQuery от box
.
Это может быть просто сделано, $(box)
. Анкет Затем применить .is()
.
$(box).is(":checked");