Wie man nächste Iteration in jQuery.each () util überspringen?
-
20-08-2019 - |
Frage
Ich versuche, durch eine Reihe von Elementen zu durchlaufen. jQuery-Dokumentation sagt:
Rückkehr nicht falsch ist das gleiche wie eine for-Schleife-Anweisung in eine fortsetzen, wird es sofort an die nächste Wiederholung überspringen.
Ich habe versucht Aufruf ‚Rückkehr nicht-false;‘ und 'nicht-false;' (Sans zurück), von denen keiner in der nächsten Iteration überspringt. Stattdessen brechen sie die Schleife. Was bin ich?
Lösung
Was bedeuten sie durch nicht-falsch ist:
return true;
So diesen Code:
var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
if(arr[i] == 'three') {
return true;
}
alert(arr[i]);
});
Wird alarmieren eins, zwei, vier, fünf
Andere Tipps
Durch die Rückkehr nicht falsch ", meinen sie einen Wert zurückgeben, die nicht funktionieren würde falsch boolean. So könnte man zurückkehren true
, 1
, 'non-false'
, oder was auch immer Sie denken können.
Javascript Art hat von der Idee der ‚Truthiness‘ und ‚falsiness‘. Wenn eine Variable dann einen Wert hat, 9AS Regel werden Sie sehen) es ‚Truthiness‘ hat - null oder kein Wert neigt zu ‚falsiness‘. Die Schnipsel unten helfen kann:
var temp1;
if ( temp1 )... // false
var temp2 = true;
if ( temp2 )... // true
var temp3 = "";
if ( temp3 ).... // false
var temp4 = "hello world";
if ( temp4 )... // true
Wir hoffen, das hilft?
Auch, es lohnt sich diese Videos von Douglas Crockford Check-out
Update: Dank @cphpython für die defekten Links Spek - ich habe jetzt bei Arbeitsversionen Punkt aktualisiert
Vergessen Sie nicht, dass Sie manchmal fallen nur das Ende des Blocks auf die nächste Iteration zu erhalten:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
Anstatt tatsächlich wie diese Rückkehr:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
Die Schleife nur Pausen, wenn Sie buchstäblich false
zurück. Ex:
// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
Das heißt, Sie irgendetwas anderes zurückkehren können, einschließlich undefined
, das ist, was Sie zurück, wenn Sie nichts zurückgeben, so können Sie einfach eine leere return-Anweisung verwenden:
$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration
// otherwise do something
});
Es ist möglich, diese von Version variieren können; dies gilt für jquery 1.12.4. Aber wirklich, wenn man den Boden der Funktion auszutreten, sind Sie auch nichts zurückkehren, und das ist, warum die Schleife wird fortgesetzt, so würde ich erwarten, dass es überhaupt keine Möglichkeit, dass die Rückkehr nichts konnte nicht weiter die Schleife. Es sei denn, sie alle zwingen wollen, etwas zu beginnen Rückkehr der Schleife in Gang zu halten, Rückkehr nichts hat einen Weg, um es zu halten.
jQuery.noop () helfen kann,
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});