2011-01-21 12 views
14

私はそれぞれを使ってループしたい要素のコレクションを持っていますが、それらをループforループの内側にループしています。私がそれぞれの中で欲しいものを見つけたら、私は逃げるために虚偽に戻ります。次回のアウターループの実行時に、私が戻ってきた要素の後ろの各要素で開始したい。一般的なコード例:jQuery:0以外のインデックスで始まる各メソッドの使用方法

var nextIndex = 0; 

for (var j=1; j <= someCount; j++) { 
    // do outside loop stuff 

    $('#someElemID').find('.someClass').each(function(index) { 
     if (/*this is right one*/) { 
      // do something 
      // next index should get passed to each function next loop... somehow? 
      nextIndex = index + 1; 
      return false; 
     } 
    }); 
} 

私は、forループへの切り替えについて考えたが、その後、私は.find('.someClass')からの戻りにアクセスする方法に関して、混乱しました。たぶんそれは別の質問です...

これは明らかですか?

var $elms = $('.someClass', '#someElemID'), 
    nextIndex = 0; 

for (var j = 1; j <= someCount; j++) { 
    // do outside loop stuff 

    $elms.slice(nextIndex).each(function(index) { 
     if (/*this is right one*/) { 
      nextIndex = index + 1; 
      return false; 
     } 
    }); 
} 

大幅にパフォーマンスを向上させる必要があります:要素が静的である場合に

答えて

17

使用slice()http://api.jquery.com/slice/

$('#someElemID').find('.someClass').slice(nextIndex).each(... 

はところで、キャッシングを検討してください。

$('#someElemID .someClass:gt(' + storedIndex + ')').each(function() { 
    ... 
+0

これ、少しの変更で、私は私の既存のコードに少なくとも変更に必要な正確に何をやりました!ありがとう。 –

6

別の可能性は、インデックスをunincremented格納することで、あなたはこのように、直接保存されたインデックスの後に発生する要素を選択するgt selectorを使用することができますこれを実行するか、必要なバリエーションがいくつあるのですか?私はnextValueを宇宙に浮かべておきたいとは思いません。このようにすれば、複数の異なるキューを作成することができます。そのアイテムを一度しか見つけたくないように思えますし、もう一度それを検索したくないと思うようです。これはちょうどそれを行う必要があり、それはセレクタをキャッシュすることによって動作します。呼び出し間でDOMを変更する場合は、他の回答の1つを使用します。

nameThisFunction = function(s) { 
    var self = this; 
    this.selector = $(s); 
    return function(searchFor) { 
     self.selector.each(function(i) { 
      if (/*Do your comparision to searchFor*/) { 
       // Do what you want 
       self.selector.splice(i, 1); 
       return false; 
      } 
     }); 

    } 
}; 

var thisQueue = new nameThisFunction('#someElemId .someClass'); 

thisQueue('Search for something here'); 

は、ここで例のフィドルです:http://jsfiddle.net/robert/RCfeJ/

+2

+1はgtセレクタを指しています。あなたはそれをそのように使うことができるとは思わなかった。ありがとう。 –

3

私はあなたが行っている頻度を知らない:

+1

+1あなたが私にこのことをやってもらえない別の方法を示してくれたからです。私はもうこれ以上熟考する必要があります。ありがとう。 –

関連する問題