2015-01-06 15 views
6

Như tôi đã biết từ Jquery học tập, chỉ số chức năng của jquery có thể được sử dụng:Jquery Index chức năng với chuỗi selector

  • .index() // không có đối số
  • .index(domObject) // đối số là một đối tượng dom
  • .index(JqueryObject) // đối số là đối tượng Jquery
  • .index("selectorString") // đối số là một chuỗi chọn

Tôi đang thử nghiệm chức năng chỉ mục với đối số là một chuỗi chọn.

html -> cơ thể:

<div class="name" id="id1"> 
    <h2>Z</h2> 
    <h2>X</h2> 
</div> 
<div class="name" id="id2"> 
    <h2>A</h2> 
    <h2>B</h2> 
</div> 

Jquery kịch bản:

var index1 = $('.name').index("#id1"); 
var index2 = $('.name').index("#id2"); 
alert(index1); 
alert(index2); 

Kết quả là: 0 cho index1 (đúng) và -1 cho index2 (không đúng).

Vì vậy, Câu hỏi đặt ra là: Tại sao tôi không thể nhận được giá trị chỉ mục chính xác của div # id2?

jsfiddle: http://jsfiddle.net/GhPxD/60/

+3

hoán đổi nó '$ (" # id2 "). index ('. name');' # id2' trong bộ sưu tập '.name' – adeneo

+0

Vì vậy, tại sao tôi không thể lấy chỉ mục của .name trong bộ sưu tập # id2. (nó trả về -1): D –

Trả lời

2

Không có lỗi ở đây, API chỉ là ... lạ. Here's the documentation:

Nếu .index() được gọi trên một tập hợp các yếu tố và một phần tử DOM hoặc đối tượng jQuery được thông qua tại, .index() trả về một số nguyên chỉ ra vị trí của phần tử thông qua tương đối so với bộ sưu tập gốc.

Nếu một chuỗi selector được thông qua như là một cuộc tranh cãi, .index() trả về một số nguyên chỉ ra vị trí của phần tử đầu tiên trong đối tượng jQuery liên quan đến các yếu tố kết hợp bởi bộ chọn. Nếu không tìm thấy phần tử , .index() sẽ trả về -1.

gì bạn muốn là như vậy

$('#id2').index(".name"); 

Có chức năng này cư xử theo những cách rất khác biệt là rất khó hiểu IMO.

+0

Về cơ bản, bạn chính xác. $ ('# id2'). Chỉ mục (". Name"); và $ ('# id1'). chỉ mục (". name"); trả lại kết quả chính xác và có vẻ như đó là cách sử dụng hàm chỉ mục với đối số chuỗi chọn. Nhưng một điều nữa bạn có thể giải thích: lý do tại sao $ ('. Name'). Index ("# id1"); trả lại chỉ mục chính xác? Nó có vô tình đúng không? –

+0

Thành phần .name đầu tiên là # id1. Vì vậy, chỉ mục của phần tử .name đầu tiên trong tập # id1 là 0. Có, điều đó vô tình đúng. Tôi không chắc nhiều nhà phát triển có thể sử dụng chính xác chức năng chỉ mục với các đối số lúc đầu tiên không ... –

0

Bạn có thể vượt qua đối tượng jquery trong phương pháp chỉ số để làm cho công việc này:

var index = $('.name').index($("#id2")); 

Working Demo

+0

Nó xuất hiện tài liệu là sai vì điều này thực sự làm việc, nhưng các tài liệu nhà nước một bộ chọn chuỗi có thể được cung cấp. Nó cũng có thể là một lỗi trong chính jQuery. –

+0

Những gì bạn đã làm là sử dụng phương pháp thứ 3 tôi đề cập ở trên: .index (JqueryObject) // đối số là đối tượng Jquery –

+0

có thực sự ..... –

-1
statement 1 : var index1 = $('.name').index("#id1"); 
statement 2 : var index2 = $('.name').index("#id2"); 

tuyên bố 1 1.As bạn biết khi nào bạn sử dụng bất kỳ selector trong jquery nó trở lại phù hợp đầu tiên yếu tố 2.bây giờ bạn cố gắng tìm chỉ số của index("#id1") để nó tìm thấy thành công ở chỉ số 0 để nó return 0

tuyên bố 2 1.As bạn biết khi nào bạn sử dụng bất kỳ selector trong jquery nó trở lại phù hợp đầu tiên yếu tố 2. Bây giờ bạn cố gắng tìm chỉ mục của index("#id2") để không thể tìm thấy bất kỳ phần tử con nào với số #id2 để nó reurn -1

+0

Xin lỗi, tôi không nghĩ bạn đúng ở câu lệnh này "khi bạn sử dụng bất kỳ bộ chọn nào trong jquery nó trả về phần tử khớp đầu tiên". $ ('. name') trả về một đối tượng Jquery với 2 doms bên trong nó (div # id1 và div # id2) –