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());
  }

 });
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top