2010-06-29 9 views
13

¿Cómo puedo salir del circuito $.each cuando se cumple una condición? No quiero iterar más la colección.

$(vehicles).each(function() { 
    if (this["@id"] === vehicleId[0]) { 
     vehicle = this; 
    } 
}); 

he intentado con break; & return; declaración pero se ve la ejecución no no se detiene en ese punto. Cualquier idea sería muy apreciada.

+0

¿Seguro el condicional es conocido nunca? tal vez intente this.attr ('id') en su lugar? –

+1

No use '@' porque está en desuso. Además, ¿por qué no simplemente usar 'vehicle = $ ('#' + vehicleId [0])' – Mottie

+0

posible duplicado de [Cómo salir de Jquery's Each Loop] (http://stackoverflow.com/questions/1784780/how- to-break-out-of-jquerys-each-loop) – outis

Respuesta

14

Devolver falso es el equivalente a salir de un bucle $ .each. Así que en su ejemplo:

if (this["@id"] === vehicleId[0]) { vehicle = this; return false; } 
0

Desde .each() itera sobre un conjunto envuelto y ejecuta la función dada en cada elemento, break no afectará a la iteración real. Sin embargo, se puede lograr lo que está buscando, sin iteración simplemente llamando

vehicle = $('#' + vehicleId[0], $(vehicles)); 

o (según lo sugerido por Kobi en un comentario)

vehicle = $(vehicle).filter('#' + vehicleId[0]); 
+0

Eso sería '$ (vehículos) .filter ('# id')', iirc, no se puede filtrar una colección de esa manera. – Kobi

+0

@Kobi, En realidad, ambos funcionan. Es posible que su versión sea mejor (al menos está mucho más claro lo que realmente se está haciendo) pero la mía también debería funcionar. Si 'vehicleId [0]' tiene un valor de, digamos, "id", mi línea de código buscará ''# id'' en el contexto de' $ (vehículos) ', que es exactamente lo que hace tu línea también . =) –

Cuestiones relacionadas