2011-06-04 31 views
5

Busco un camino más corto de la escritura:Filtro de jQuery y retroceso Filtro

$('div') 
.filter(function(value) { 
    return runMyTestFunction(value); 
}) 
.hide() 
.end() 
.filter(function(value) { 
    return !runMyTestFunction(value); 
}) 
.show(); 

de esperar algo a lo largo de las líneas de:

$('div') 
.filter(function(value) { 
    return runMyTestFunction(value); 
}) 
.hide() 
.end() 
.remove(theLastWrappedSetPoppedOfftheJqueryStack) 
.show(); 

me gustaría definir inline 'runMyTestFunction' como un lambda, ya que creo que hará que el código sea más claro pero, como está escrito, tendría que duplicarlo.

Respuesta

9

Se podría hacer:

$('div') 
.filter(runMyTestFunction); 
.hide() 
.end() 
.not(runMyTestFunction) 
.show(); 

Si no desea ejecutar el método en dos ocasiones:

$('div') 
.hide() // hide all 
.not(runMyTestFunction) 
.show(); 

O si lo desea expresamente para ocultar solamente ciertos elementos:

var elements = $('div'); 
var toRemove = elements.filter(runMyTestFunction).hide(); 
elements.not(toRemove).show(); 
+0

Me gusta mejor esa tercera opción. El primero todavía no me permite alinear la función sin duplicación. El segundo podría producir algo de parpadeo al ocultar elementos y luego volver a mostrarlos, probablemente no, pero prefiero evitarlo. –

+2

Almacenar en una variable es una solución muy inteligente. ¡Guay! – supertrue