La sostituzione jQuery ciascuna con la
-
20-09-2019 - |
Domanda
Ho usato $ .each fare iterazioni per un po ', ma io continuo a sentir dire da usare JS native per fare loop. Sono molto preoccupato per le prestazioni ma non sono sicuro se è sempre possibile sostituire $ .each con in un modo significativo.
Quindi le mie domande sono, è possibile sostituire sempre $ .Ogni con per, e se non ciò che è la regola generale per quando si può fare e quando non ci riesce.
Ho un avere ogni in questo modo:
$this.find("div.class").each(function (){
var $thisparent = $(this).parent();
if (condition) {
$(this).prepend($thisparent.text());
}
if (condition2) {
$(this).prepend($thisparent.text());
}
});
Soluzione
Questo è ciò che jQuery fa con .each
, in fondo :
$.fn.each = function(callback) {
var i, length = this.length;
for(i = 0; i < length; ++i) {
callback.call(this[i]);
}
};
Quindi non è difficile sostituire il vostro funzione anonima 'contenuti' con la chiamata callback.call
. Basta essere sicuri di sostituire this
con una temporanea con l'oggetto jQuery.
La conversione del codice fornito:
var foo = $this.find("div.class"),
fooLength = foo.length,
i,
$thisparent;
for (i = 0; i < fooLength; ++i) {
$thisparent = $(foo[i]).parent();
if (condition) {
$(foo[i]).prepend($thisparent.text());
}
if (condition2) {
$(foo[i]).prepend($thisparent.text());
}
}
Per ulteriori (potenziale) di velocità, la cache foo[i]
in una temporanea. Anche, e assegnare $thisparent
solo quando necessario. Se condition
e condition2
sono mutuamente esclusivi, utilizzare un singolo if (condition || condition2)
.
Altri suggerimenti
Qualcuno confrontato le prestazioni di for
e $.each
:
http: // jquery- howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html