Utilice las funciones de la lista de subscore.js en la colección de objetos jQuery
-
26-10-2019 - |
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.
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");