2010-06-29 14 views
13

Wie kann ich von $.each Schleife beenden, wenn eine Bedingung erfüllt ist? Ich möchte die Sammlung nicht weiter iterieren.

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

Ich habe versucht, mit break; & return; Aussage, aber es sieht die Ausführung an dieser Stelle nicht nicht aufhören. Jede Idee würde sehr geschätzt werden.

+0

sind Sie sicher, dass die bedingte je getroffen wird? vielleicht versuche this.attr ('id') stattdessen? –

+1

Verwenden Sie nicht '@', weil es veraltet ist. Warum nicht einfach 'vehicle = $ ('#' + vehicleId [0])' – Mottie

+0

mögliches Duplikat von [Wie man aus Jquery's Each-Schleife ausbricht] (http://stackoverflow.com/questions/1784780/how- to-break-out-of-jquerys-each-loop) – outis

Antwort

14

Die Rückgabe von false entspricht dem Ausbrechen einer $ .each-Schleife. Also in Ihrem Beispiel:

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

Seit .each() iteriert über einen umschlossenen Satz und führt die gegebene Funktion auf jedem Element wird break keinen Einfluss auf die tatsächliche Iteration. Allerdings können Sie erreichen, was Sie nach, ohne Iteration sind einfach durch Aufruf

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

oder (wie von Kobi in einem Kommentar vorgeschlagen)

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

Das wäre '$ (vehicles) .filter ('# id')', iirc, Sie können eine Sammlung auf diese Weise nicht filtern. – Kobi

+0

@Kobi, Eigentlich beide arbeiten. Ihre Version ist wohl besser (zumindest ist es viel klarer, was tatsächlich getan wird), aber meiner sollte auch funktionieren. Wenn 'vehicleId [0]' einen Wert von, sagen wir, "id" hat, sucht meine Codezeile nach ''# id'' im Kontext von' $ (vehicles) ', was genau das ist, was Ihre Zeile auch tut . =) –

Verwandte Themen