1


0

私はjqueryオブジェクトのコレクションを構成するこのJqueryコードを持っています。 実行には600ミリ秒かかります。 最適化したい

var tousBt = $( 'img.boutonReduire'); var stack = $( ''); tousBt.each(function(){var id = $(this).attr( 'id'); stack = stack.add( '#table' id).add( '#img' id);});

私にできることはありますか? 結果はjqueryオブジェクトのコレクションになります。

編集:私はすべてのスタック要素を取得し、それらを非表示にします。stack.addClass( 'hideit');およそ125の要素があります。 そして$( '*')。lengthは約7100要素を与えます。

1 Answer


3


まず第一に、反復関数内の代入操作を削除してください。 `stack`はインスタンスです---再割り当てする必要はありません:

var tousBt = $( 'img.boutonReduire'); var stack = $( ''); tousBt.each(function(){var id = $(this).attr( 'id'); stack.add( '#table' id).add( '#img' id);});

また、add()を何度も呼び出している場合は、jQueryのオーバーヘッドを回避することをお勧めします。 これはセレクターを集めるために軽量の配列を使うバージョンです:

var tousBt = $( 'img.boutonReduire'); var stack = []; tousBt.each(function(){var id = this.id; stack.push( '#table' id); stack.push( '#img' id);});

次に、jQueryで使用できる最終的なセレクタを取得します。

var selector = stack.join( '、');
//$(stack.join(','));

*編集:*これは絶対に遅れるように思えるかもしれません、しかしこれは実際に最速です(少なくともショットの価値があります):

var tousBt = $( 'img.boutonReduire'); tousBt.each(function(){var id = this.id; $( '#table' id).addClass( 'selected'); $( '#img' id).addClass( 'selected');}); var stack = $( '。selected');