2011-01-26 12 views
7

私はHTML要素の配列を持っています。配列内のn番目のアイテムを取得

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ // going through the array 
    var prevBox = i>0?$(boxes[i-1]):false; // check whether a previous box exists 
    if (prevBox) { } // do something 
    else { } // do something else 
}); 

これはうまく機能:私は、アレイ内の前のオブジェクトは次のように存在するかどうかをチェックしています。しかし、私はまた、配列内のすべての4番目のオブジェクト(ボックス)の存在をチェックする必要がありますか、より正確には、現在のものより3つ前のオブジェクトが存在するかどうかを確認する必要があります。

これは動作しません:(i % 4) == 0が答えかもしれませんが、JavaScriptの私の限られた知識で、私は何を私にそれを適用する方法がわからない場合は

var prevBox = i>0?$(boxes[i-4]):false; 

私は​​を使用してチェックすると信じて今ある。

誰でも手助けできますか?ありがとう!

答えて

3

ループ内でmodulus operatorを使用して、4番目の間隔にいるかどうかを確認できます。

質問が明確になりました。

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ 
    if(i >= 3) { 
     var prevBox = boxes.eq(i - 3); 
     var pos = prevBox.position(); 
     var top = pos.top; 
    } 
}); 
+0

ありがとうパトリック、しかしそれは私が何をしているのか全く分からない。オブジェクトから 'position()。top'値を取得し、それに別の値を追加する必要があります。他の 'boxes [3]'では 'boxes [5]'の 'boxes [3]'、 'boxes [8]'などの 'boxes [0]'、 'boxes [6] 'の値が必要です。 申し訳ありませんが、私はこれを簡単な方法で説明するのに問題があり、十分に具体的ではありませんでした。 – hannu

+0

つまり、各繰り返しで3段階に戻って、ボックスから 'position()。top'値を取得し、それを使ってこの現在のボックスの新しい値を計算する必要があります。 – hannu

+0

@hannu:*各要素について、その背後にある要素が3つ必要だと言っていますか?上記のコメントの番号は一貫していません。それは3から6に8になります。パターンはありません。 – user113716

1

はインクリメントステップとして4で反復を使用していない通常の1

16

あなただけではなく、forループを使用することはできますか?

for (var i=0; i< boxes.length; i+=4) 
    { 
    // do stuff with boxes[i] 
    } 

私は特にJQueryでは大きくはありませんが、正常に動作する通常のJavaScriptでは大きくありません。

EDIT:あなたはより広くpreviousTopはその後、設定されているスコープここで

var previousTop; 
for (var i=0; i< boxes.length; i++) 
    { 
    // do stuff with boxes[i] 
    if (((i+1) % 4) === 0) 
     { 
      previousTop = boxes[i].position.top; 
      // do stuff with the fourth item 
     } 
    } 

...あなたはすべての項目に作用するが、第四に、特定の何かをしたいので、多少の問題を再記述しましたあなたがする必要がある他のことをする前に、毎四番目の項目。次に、次の4番目の要素に到達すると、一時変数の前の値から値が得られます。これは、以下の@patrick dwの回答に対するあなたの回答から探しているものと似ています。

+0

ありがとうございます!私は.each()ループの中でこれをやりたいのですが、すでに内部に他のものをやっているからです。 – hannu

+0

同じことを行い、iを1つ増やしてから、匿名関数ではなく、数行のコードしか持たないようにしてください。透明性が高く、デバッグも簡単です。 – glenatron

+0

もう一度おねがいします!私はこれがまだ@patrick dwのオリジナルの解決策と同じ問題を抱えていると信じています。私が必要としたのは、ループのすべての反復で3つのステップに戻り、そこから値を取得することでしたが、これは4番目ごとのアイテム(0,3,6,9など)を取得していました。申し訳ありません、ただ十分に具体的ではありませんでした! – hannu

関連する問題