Chỉnh sửa (xem nhận xét) Câu trả lời ban đầu là không đúng ... Tôi sẽ giữ nó ở đây bây giờ để nhận xét có ý nghĩa.
Nhìn vào nguồn jQuery cho index
, bạn sẽ nhìn thấy following snippet:
if (!elem) {
return (this[0] && this[0].parentNode) ? this.prevAll().length : -1;
}
Hãy so sánh này để tương ứng (nếu rất khác nhau) đoạn mã từ một bản phát hành trước đó, 1.6.2. Lưu ý việc sử dụng this[0]
:
return jQuery.inArray(this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery(elem) : this.parent().children());
Dường như trong phiên bản hiện tại phần this.prevAll
gây ra vấn đề. Nếu bạn thay đổi nó thành this.eq(0).prevAll
(để sao chép trạng thái tài liệu index
) thì bạn sẽ nhận được giá trị chính xác được trả về. Vì vậy, nó sẽ xuất hiện đây là một lỗi jQuery.
Trong phiên bản 1.6.2, inArray
được sử dụng. Phương thức đó trả về chỉ mục của đối số đầu tiên trong đối số thứ hai (hoặc -1
nếu đối số đầu tiên không được tìm thấy trong lần thứ hai). Đối số đầu tiên là this[0]
(phần tử đầu tiên trong tập hợp đã khớp), chúng tôi nhận được kết quả mong đợi.
Dưới đây là một updated fiddle với nguồn jQuery đã sửa đổi đi kèm. Kết quả chính xác được cảnh báo.
Original câu trả lời (điều này là không chính xác):
Đọc phần trích dẫn của các tài liệu một lần nữa một cách cẩn thận (làm nổi bật đậm thêm):
giá trị trả về là một số nguyên cho biết vị trí của phần tử đầu tiên trong đối tượng jQuery liên quan đến các phần tử anh chị em của nó.
Chỉ vì hai trong số các anh chị em đã bị xóa khỏi tập hợp phù hợp, nó không thay đổi giá trị trả về bởi index
. Nói cách khác, phần tử phù hợp (<li>Fourth Item</li>
) sẽ luôn có chỉ mục 3, liên quan đến các anh chị em của nó (trừ khi, tất nhiên, các anh chị em mới được chèn vào DOM trước phần tử được đề cập).
Nhấn đinh trên đầu. Bạn đã khám phá ra một sự hồi quy. :) – Jon
Yay cho tôi !!! Bạn có thể xem vé tại đây: http://bugs.jquery.com/ticket/10977 –
Dựa trên những phát hiện của tôi (xem [answer] (http://stackoverflow.com/a/8424662/50079)), tôi nghĩ rằng vé là sai lầm. Đây là một hồi quy được giới thiệu trong 1.6.3 và nên được báo cáo như vậy. Có (tất nhiên) không có gì trong các ghi chú phát hành 1.6.3 chỉ ra rằng hành vi được ghi lại của 'index()' sẽ thay đổi. – Jon