Pregunta

Estoy trabajando con una aplicación que usa jQuery y Underscore.js. Me gustaría poder usar algunas de las funciones de iterador de subscorte, como any() y all() sobre una colección de objetos jQuery. ¿Hay alguna forma de hacer esto? Me gustaría hacer algo similar a lo siguiente:

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

Pero esto arroja un error:

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

Así que supongo que el cuadro en este contexto no está actuando como un objeto jQuery.

¿Fue útil?

Solución

Tienes que envolver box En jQuery:

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

Además, en lugar de crear un nuevo objeto para cada elemento de la colección, podría usar el nativo box.checked:

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

En otros comentarios: jQuery tiene su propio método de filtro:

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

Además, en su ejemplo, ¿está seguro de que tiene que filtrar? Podrías usarlo tan fácilmente como tu selector:

checkboxes = $("input[type=checkbox]:checked")

Otros consejos

Aquí box es un HTMLInputElement Tipo de objeto. No es un objeto jQuery. Como .is es un método de objeto jQuery, necesita objeto jQuery de box.

Se puede hacer por, $(box). Luego aplicar .is().

$(box).is(":checked");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top