Pergunta

Estou usando $ .ach para fazer iterações há algum tempo, mas continuo ouvindo as pessoas dizerem usar o JS nativo para fazer loops. Estou muito preocupado com o desempenho, mas não tenho certeza se é sempre possível substituir $. Encontre por uma maneira significativa.

Portanto, minhas perguntas são: é possível sempre substituir $ .a cada para, e se não é qual é a regra geral quando pode ser feita e quando não puder.

Eu tenho um assim:

 $this.find("div.class").each(function (){
  var $thisparent = $(this).parent();

  if (condition) {          
   $(this).prepend($thisparent.text());
  }

  if (condition2) {          
   $(this).prepend($thisparent.text());
  }

 });
Foi útil?

Solução

É isso que o jQuery faz com .each, basicamente:

$.fn.each = function(callback) {
    var i, length = this.length;
    for(i = 0; i < length; ++i) {
        callback.call(this[i]);
    }
};

Portanto, não é difícil substituir o 'conteúdo' da sua função anônima pelo callback.call ligar. Apenas certifique -se de substituir this com um temporário com o objeto jQuery.

Convertendo seu código fornecido:

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

Para velocidade (potencial) adicional, cache foo[i] em um temporário. também, e atribuir $thisparent Somente quando necessário. Se condition e condition2 são mutuamente exclusivos, use um único if (condition || condition2).

Outras dicas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top