Вопрос

Я работаю с приложением, которое использует как 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");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top