Asynchrone Funktion each()
Wenn Sie eine wirklich komplexe Dokumente wo das jquery ausgeführt wird jede() Funktion sperrt den Browser während der Iteration, und/oder Internet Explorer zeigt die ' Wollen Sie dieses Skript weiter ausführen? Nachricht, wird diese Lösung den Tag retten.
jQuery.forEach = function (in_array, in_pause_ms, in_callback)
{
if (!in_array.length) return; // make sure array was sent
var i = 0; // starting index
bgEach(); // call the function
function bgEach()
{
if (in_callback.call(in_array[i], i, in_array[i]) !== false)
{
i++; // move to next item
if (i < in_array.length) setTimeout(bgEach, in_pause_ms);
}
}
return in_array; // returns array
};
jQuery.fn.forEach = function (in_callback, in_optional_pause_ms)
{
if (!in_optional_pause_ms) in_optional_pause_ms = 10; // default
return jQuery.forEach(this, in_optional_pause_ms, in_callback); // run it
};
Die erste Möglichkeit der Verwendung ist die gleiche wie bei each():
$('your_selector').forEach( function() {} );
Eine Mit dem optionalen 2. Parameter können Sie die Geschwindigkeit/Verzögerung zwischen den Iterationen festlegen was für Animationen nützlich sein kann ( das folgende Beispiel wartet 1 Sekunde zwischen den Iterationen ) :
$('your_selector').forEach( function() {}, 1000 );
Da dies asynchron geschieht, können Sie sich nicht darauf verlassen, dass die Iterationen vor der nächsten Codezeile abgeschlossen sind:
$('your_selector').forEach( function() {}, 500 );
// next lines of code will run before above code is complete
Ich habe dies für ein internes Projekt geschrieben, und obwohl ich mir sicher bin, dass es verbessert werden kann, hat es für unsere Zwecke funktioniert, und ich hoffe, dass einige von Ihnen es nützlich finden. Danke -