2011-02-03 33 views
7

Làm cách nào để bắt đầu chỉ mục jQuery $.each() từ 1 thay vì 0?

Tôi đang sử dụng hàm .each để điền vào hộp chọn. Vì vậy, ở đây tôi muốn cư tùy chọn trong hộp chọn từ 1. Vì vậy, dựa trên một điều kiện tôi muốn thêm tùy chọn trong chỉ số đầu tiên tức là 0.

+4

Bạn không thể thoát khỏi không chỉ dựa nếu bạn muốn làm bất cứ chương trình nghiêm túc. – ChaosPandion

+0

@ChaosPandion điều này phụ thuộc. Nếu bạn đang sử dụng ví dụ hàng đầu tiên trong một bảng như một hàng ví dụ trong khi những người khác có đầu vào, bạn muốn bắt đầu tại 'i = 1' để đọc từ đầu vào (hoặc có thể bạn đúng': not (: first- con) ').:) –

+1

@Radek - Tôi chỉ đơn giản là chơi các tỷ lệ cược mà họ có nghĩa là cho chỉ số để luôn luôn bắt đầu tại '1' không có vấn đề tình hình. – ChaosPandion

Trả lời

8

$.each

Vì vậy, cố gắng

$.each(obj, function(i, elem) { 
    if (i === 0) return; 
    // do stuff 
}); 

Ngoài ra viết lại mã của bạn để các chỉ mục và dữ liệu của nó bắt đầu ở mức 0. JavaScript là 0 dựa trên nhau thay vì 1 dựa trên Matlab và một số ngôn ngữ khác.

+0

Điều này sẽ bỏ qua phần tử cuối cùng. Vì vậy, anh ta sẽ phải truy cập thủ công phần tử cuối cùng vì mỗi vòng lặp sẽ ngắn gọn bởi một – Victor

+1

@Victor, điều này sẽ bỏ qua phần tử đầu tiên, không phải là phần tử cuối cùng. – jball

+0

@Victor điều gì khiến bạn nghĩ vậy? SAI RỒI. – Raynos

3

Bạn không thể. Tại sao không chỉ khai báo một biến khác ở dòng đầu tiên của hàm var myIndex = index + 1;?

+0

Vâng, tôi nghĩ đó là câu hỏi đang đề cập đến. – lonesomeday

0

Xem các điểm làm rõ trong các nhận xét bên dưới, jQuery.each hoặc một số biến thể của chúng không phải là công cụ phù hợp. Sử dụng vòng lặp for và thêm 1 vào chỉ mục để xuất giá trị của <option>.

Sử dụng .prepend để chèn một option là đứa con đầu lòng của một select:

for (var i = 0; i < 10; i++) { 
    $('select').prepend('<option>' + (i + 1) + '</option>'); 
} 
+0

Ew. ': gt' chỉ cảm thấy chậm và sai. Tôi sẽ đi cho refactoring hoàn chỉnh trước khi sử dụng đó. – Raynos

+0

Tôi đang sử dụng hàm .each để điền vào hộp chọn, Vì vậy, ở đây tôi muốn điền vào hộp tùy chọn từ 1, Vì vậy, dựa trên điều kiện tôi muốn thêm tùy chọn trong chỉ mục đầu tiên tức là 0. – user588181

+0

@Raynos là bạn ok bằng cách sử dụng ': đầu tiên, : eq,: last'? ': gt' được triển khai theo cùng một cách - đó là chức năng lọc nội bộ. –

2

Không thể. jQuery.each vòng lặp trên Đối tượng (Mảng). Đối với các đối tượng thực, nó sử dụng vòng lặp for in. Objectpropertys không có một chỉ số được đảm bảo ở tất cả bằng cách này.

Đối với mảng sử dụng tiêu chuẩn for loop, nhưng bạn không có quyền truy cập vào chỉ mục bắt đầu.

Ảnh đẹp nhất của bạn là chỉ cần bỏ qua phần tử đầu tiên.

$.each(obj, function(index, elem) { 
    if(index === 0) 
     return true; 

    // code 
}); 
+0

Hoặc viết nó trên một dòng hoặc sử dụng dấu ngoặc! – Raynos

+0

Điều này sẽ bỏ qua phần tử cuối cùng. Vì vậy, anh ta sẽ phải truy cập thủ công phần tử cuối cùng vì mỗi vòng lặp sẽ bị cắt ngắn bởi một – Victor

+2

@Victor, tại sao nó sẽ bỏ qua phần tử cuối cùng? –

-2
$('.article_number').each(function(index) { 
    index=index+1; 
    $(this).text(index); 
}); 

thậm chí bắt đầu từ 0 mỗi lần phải mất chỉ số và thêm một cho văn bản.

vì vậy 0 sẽ trở thành 1 trong văn bản. 1 sẽ trở thành 2 văn bản và v.v.

Điều này sẽ không làm gián đoạn mục cuối cùng trong dòng vì nó chỉ thay đổi chỉ mục của văn bản không phải trên từng chức năng.

Hy vọng đây là những gì bạn quan tâm.

0

Đây là những gì tôi đã làm:

var start = index + 1; 

này chỉ thêm 1 vào chỉ số hiện tại .. sau đó sử dụng biến mới thay vì 'index'.

0

var data = [42, 1337]; 
 
$.each(data, function(i) { 
 
    i++; 
 
    console.log(i); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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