2010-01-21 37 views
7

Có thể chạy câu lệnh jQuery .each một số lần nhất định thay vì sau đó cho mỗi mục được lặp lại không? JSON được lặp lại là nguồn cấp dữ liệu last.fm và dĩ nhiên, chúng bỏ qua yêu cầu "giới hạn" thường xuyên. Tôi muốn bỏ qua lỗi này bằng cách chỉ chạy câu lệnh .each rất nhiều lần.jQuery .each question

Trả lời

19
var limit = 5; 

$("somelement").each(function(i, val) { 
     if(i > limit) return false; 
     // do stuff 
}); 

hoặc

$("somelement:lt(5)").each(function() { 
     // do stuff 
}); 
+0

@Lance Anh ấy trả về false. –

+0

Điều này có vẻ như một vũ trang mạnh mẽ một giải pháp khi đã tồn tại trong jQuery. – ashchristopher

+0

Điều này có hoạt động trên dữ liệu JSON không? Đó là những gì đang thay đổi. –

1

Trả lại false out of the iterator khi bạn muốn dừng. Tham số đầu tiên cho trình lặp của bạn là chỉ mục (khi lặp qua các mảng).

+1

+1 lại cho bạn. Tôi cho rằng một số người không thích giải pháp này bởi vì nó không có sự tao nhã của 'slice()' hoặc sửa đổi bộ chọn, nhưng đây là một giải pháp sử dụng tất cả ... Giải pháp thực sự khi bạn cần thực thi giới hạn trong vòng lặp, có thể sau khi một số phân tích về việc một số mặt hàng nhất định có được tính vào giới hạn hay không. – king14nyr

11

Thay vì thay đổi .each, sửa đổi selector của bạn để chỉ chọn các yếu tố 'n' đầu tiên.

http://docs.jquery.com/Selectors/lt#index

+6

$ ("somelement: lt (5)"); sẽ kéo lùi 5 yếu tố –

+1

+1: Điều này có vẻ như là cách tốt nhất để làm điều đó. – Powerlord

+0

Điều này tốt hơn nhiều sau đó là câu trả lời được chấp nhận. – jhanifen

2

Định nghĩa một biến trước khi vòng lặp của bạn, tăng nó trong mỗi và if(myvar == 10){return false;}

Trở lại 'false' từ bên trong mỗi chức năng hoàn toàn dừng lại vòng lặp http://docs.jquery.com/Core/each

+0

Đây là giải pháp phù hợp với tôi. Trong câu trả lời được chấp nhận, "i" sẽ không trả lại chỉ mục cho tôi vì có khóa. –

4

Giải pháp tốt nhất là sử dụng phương thức .slice trong jQuery.

var limit = 5; 
$("somelement").slice(0, limit).each(function(i, val) { 
    // do stuff 
});