2012-05-02 38 views
9

Tôi đang cố gắng để có được một vị trí của một phần tử trong một bộ jQuery.Chức năng jQuery indexOf?

Here's what I tried so far.

Tôi muốn để có thể làm điều gì đó như thế này:

$('ul').find('a').indexOf('.active'); 

Và có được vị trí của .active trong tập hợp các a 's.

Có chức năng nào giống như chức năng indexOf() cho jQuery không? Phương pháp index() không hoạt động

+0

đầu ra là gì? – gdoron

+0

@gdoron đầu ra dự kiến ​​là 2 (là phần tử 'a' thứ 3) – tobyodavies

+0

@tobyodavies. [có một quá tải hữu ích] (http://stackoverflow.com/a/10406578/601179). – gdoron

Trả lời

10

nếu bạn vượt qua bộ jQuery ($searchFor) làm đối số cho phương thức index của một bộ jQuery khác ($searchIn) tức là

$searchIn.index($searchFor) 

nó sẽ trở lại chỉ số của $searchFor trong tập $searchIn

Trong ví dụ của bạn:

$('ul a').index($('ul a.active')); 

+3

Lưu ý: '$ ('ul a')' tương đương với '$ ('ul'). Tìm ('a')' – tobyodavies

+3

... và nhanh hơn một chút – Alp

+0

@Alp. [Điều này thậm chí còn nhanh hơn] (http://stackoverflow.com/a/10406578/601179) vì nó không cần truy vấn DOM hai lần. – gdoron

-2

Bạn có thể làm điều này bằng cách chỉ hỏi cho nó trong selector:

$('ul a.active') 

Ý anh là gì bằng cách nhận vị trí tuy nhiên? Bạn có nghĩa là vị trí? hoặc URL?

Nếu bạn muốn biết bạn click nào cho phép nói .. Bạn sẽ sử dụng $(this) bên trong chức năng sự kiện của mình. Dưới đây là một ví dụ mà trả về vị trí hiện tại của nguyên tố này bạn click vào, nếu có nhiều với lớp .active:

Để có được vị trí:

$('ul a.active').click(function(){ 
    alert($(this).position()); 
}) 

Để có được vị trí URL:

$('ul a.active').click(function(){ 
    alert($(this).attr('href')); 
}) 
+0

vị trí đề cập đến chỉ mục, bạn không thể nhận được url hoặc phần tử (nói chung) cho phép một mình liên quan đến tập hợp jQuery. OP cũng biết rõ cách sử dụng tìm kiếm, vì vậy '$ ('ul a.active')' rõ ràng không làm gì giống như những gì OP đang yêu cầu. – tobyodavies

+0

Anh ấy không yêu cầu 'chỉ số' mà anh ta yêu cầu cho' indexOf', cuối cùng tôi đã kiểm tra chúng là khác nhau. –

+0

"Chỉ mục" khác với "indexOf" như thế nào? Tôi không thể nghĩ ra một ngôn ngữ duy nhất thực hiện cả hai trên cùng một loại đối tượng và giữa các ngôn ngữ mà chúng đồng nghĩa với nhau. OP sử dụng từ "indexOf" không phải là "chỉ mục" bởi vì đó là tên của phương thức dựng sẵn trong JS trên mảng và chuỗi. Ngoài ra, bởi vì anh ta đang tìm kiếm "indexOf" một cái gì đó có nghĩa là anh ta đang tìm kiếm _an index_ không phải là một URL và không phải là một phối hợp vị trí, đây là quan điểm của tôi. – tobyodavies

0

Bạn chỉ cần cung cấp cho các index chức năng một đối tượng jQuery:

var elements = $('ul a'); 
var index = elements.index(elements.filter('.active')); // 2 

alert(index); 

Live DEMO


Không có chức năng như vậy ra khỏi hộp, nó có thể được thực hiện một cách dễ dàng như thế này:

var index = -1; 
$('ul a').each(function(i){ 
    if ($(this).hasClass('active')){ 
     index = i; 
     return false; 
    } 
}); 

alert(index); 

Live DEMO

0

Logic của bạn là âm thanh, bạn chỉ cần lấy yếu tố sai: http://jsfiddle.net/xz9dW/19/

var index = $('ul a.active').closest('li').index(); 

Liên kết a không có giá trị index() vì không có anh chị em; bạn phải lấy li

+0

Tôi muốn có thể lấy chỉ mục của 'a' trong tập hợp mặc dù – qwertymk