10

私はしばらくの間$.eachを使用して反復を行ってきましたが、ループを実行するためにネイティブJSを使用するように言われるのを聞き続けています。私はパフォーマンスについて非常に心配していますが、意味のある方法で$.eachをforに置き換えることが常に可能かどうかはわかりません。

ですから、私の質問は、$。eachを常にforに置き換えることは可能ですか。そうでない場合は、実行できる場合と実行できない場合の経験則を教えてください。

私はこのようなそれぞれを持っています:

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

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

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

 });
4

2 に答える 2

9

これは、jQueryが.each基本的に行うことです:

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

callback.callしたがって、無名関数の「コンテンツ」を呼び出しに置き換えるのは難しくありません。必ずthisjQueryオブジェクトの一時的なものに置き換えてください。

提供されたコードの変換:

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

foo[i]追加の(潜在的な)速度を得るには、一時的にキャッシュします。また、必要な場合にのみ割り当て$thisparentます。conditionとが相互に排他的である場合condition2は、単一のを使用しif (condition || condition2)ます。

于 2009-09-01T00:06:58.307 に答える
5

誰かがとのパフォーマンスを比較しましfor$.each

http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html

于 2009-09-01T00:04:52.697 に答える