2011-01-26 32 views
7

Tôi có một mảng các phần tử HTML. Tôi đang kiểm tra xem một đối tượng trước đó trong mảng có tồn tại như thế này không:Nhận mọi mục thứ n trong mảng

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

Điều này hoạt động tốt. Nhưng tôi cũng sẽ cần phải kiểm tra sự tồn tại của mỗi đối tượng thứ tư (hộp) trong mảng, hoặc chính xác hơn là một đối tượng ba đối tượng trước khi đối tượng hiện tại tồn tại.

này không hoạt động:

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

Tôi tin rằng sử dụng jQuery.grep() và kiểm tra nếu (i % 4) == 0 có thể là câu trả lời, nhưng với kiến ​​thức hạn chế của tôi về Javascript, tôi không biết làm thế nào để áp dụng nó vào những gì tôi có ngay.

Mọi người đều có thể trợ giúp? Cảm ơn!

Trả lời

3

Bạn có thể sử dụng modulus operator trong vòng lặp để xem bạn có đang ở trong khoảng thứ tư hay không.

Câu hỏi đã được làm rõ.

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

Cảm ơn Patrick, nhưng nó không hoàn toàn làm những gì tôi theo đuổi. Tôi cần lấy giá trị 'position(). Top' từ đối tượng và thêm một giá trị khác vào nó. Trong các 'hộp [3]' khác cần một giá trị từ 'hộp [0]', 'hộp [6]' từ 'hộp [3]', 'hộp [8]' từ 'hộp [5]' và cứ thế. Xin lỗi, tôi đang gặp sự cố khi giải thích điều này một cách đơn giản và do đó không đủ cụ thể. – hannu

+0

Nói cách khác, trên mỗi lần lặp, tôi cần phải quay lại ba bước, lấy giá trị 'position(). Top' từ hộp và sử dụng nó để tính giá trị mới cho hộp hiện tại này. – hannu

+0

@hannu: Bạn có nói rằng đối với * mỗi phần tử *, bạn muốn cái nào ở đằng sau nó? Việc đánh số của bạn trong nhận xét ở trên không nhất quán. Nó đi từ 3 đến 6 đến 8. Không có một mô hình ở đó. – user113716

1

Sử dụng phép lặp với 4 là bước gia tăng và không phải là bước thông thường 1.

16

Bạn không chỉ sử dụng vòng lặp for?

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

Tôi không lớn về JQuery, nhưng trong JavaScript thông thường sẽ hoạt động tốt.

EDIT: Bạn đã redescribed vấn đề phần nào, vì vậy bạn muốn hoạt động trên tất cả các mặt hàng, nhưng làm điều gì đó cụ thể về thứ tư ...

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 
     } 
    } 

Ở đây rộng hơn scoped previousTop sau đó sẽ được thiết lập mỗi thứ tư trước khi bạn làm bất cứ điều gì khác bạn cần làm. Sau đó, khi bạn đạt đến phần tử thứ tư tiếp theo, bạn có giá trị từ biến số trước đó trong biến tạm thời của bạn, có vẻ giống với những gì bạn đang tìm kiếm từ câu trả lời của bạn cho câu trả lời của @patrick dw bên dưới.

+0

Cảm ơn! Tôi muốn làm điều này bên trong vòng lặp .each() mặc dù kể từ khi tôi đang làm công cụ khác bên trong nó rồi. – hannu

+0

Làm tương tự và tăng dần từng cái một, sau đó thay vì hàm ẩn danh chỉ có một vài dòng mã ở đó. Minh bạch hơn và dễ gỡ lỗi hơn. – glenatron

+0

Cảm ơn bạn lần nữa! Tôi tin rằng điều này vẫn có cùng một vấn đề mà giải pháp ban đầu của @patrick dw. Những gì tôi cần là trong mỗi lần lặp của vòng lặp để quay trở lại ba bước và nhận được một giá trị từ đó, trong khi điều này được mỗi mục thứ tư (0, 3, 6, 9, vv). Xin lỗi, chỉ là không đủ cụ thể! – hannu

Các vấn đề liên quan