2012-01-10 14 views
6

Estoy trabajando con una aplicación que usa tanto jQuery como underscore.js. Me gustaría poder usar algunas de las funciones del iterador del subrayado, como any() y all() en una colección de objetos jQuery. ¿Hay alguna forma de hacer esto? Me gustaría hacer algo similar a lo siguiente:use las funciones de lista underscore.js en la colección de objetos jquery

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

pero esto genera un error:

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

así que estoy asumiendo cuadro en este contexto no está actuando como un objeto jQuery .

+1

¿Hay alguna razón para no solo hacer '$ (" input [type = checkbox]: checked ")'? – Esailija

+0

podría hacerlo en este caso, pero estaba preguntando acerca de todos los métodos de interacción de subrayado en general, incluyendo _.any(), _.all(), etc. – GSto

+2

Muy rara vez necesita jQuery cuando maneja un elemento en un tiempo, por ejemplo, podría haber hecho 'return box.checked'; – Esailija

Respuesta

13

Tienes que envuelva 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, es posible que utilices el nativo box.checked:

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

En una nota al margen:jQuery has its own filter method:

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

Por otra parte, en su ejemplo - ¿estás seguro de lo que tiene que filtrar? Se podía utilizar la misma facilidad que a medida que el selector:

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

fue solo un ejemplo. También pensé en usar _.any, _.all, y tal para algunas situaciones. – GSto

+0

@Joseph, gracias - esto me ayudó. ¿Podría explicar por qué 'Tiene que ajustar el cuadro en jQuery'? –

+0

@KevinMeredith: cada vez que itera sobre una colección jQuery, los elementos individuales con ella son simples elementos vainilla DOM. Si desea obtener la funcionalidad de jQuery, debe crear una nueva instancia de jQuery. –

1

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

Puede ser simplemente hecho por, $(box). Luego aplique .is().

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