2010-05-28 36 views
14

Tôi có một danh sách tiêu chuẩn ...Tìm li nhấp số

 <ul> 
      <li><a href="#">blah 1</a></li> 
      <li><a href="#">blah 2</a></li> 
      <li><a href="#">blah 3</a></li> 
      <li><a href="#">blah 4</a></li> 
     </ul> 

Và jQuery tôi:

$('ul li a').live('click', function() { 
    var parent = $(this).parent('li'); 
}); 

Những gì tôi muốn tìm hiểu vị trí li của cha mẹ trong danh sách là nhấp vào liên kết ví dụ nhấp vào blah 3 sẽ cho tôi 2, blah 4 sẽ cho 3, v.v.

Bất kỳ ý tưởng nào?

Trả lời

30
$('ul li a').live('click', function() { 
    console.log($(this).parent('li').index()); 
}); 

Sẽ cung cấp cho bạn những gì bạn muốn, nhưng hãy nhớ đây là những chỉ số 0 dựa - tức là chi tiết đơn hàng đầu tiên là chỉ số 0, mục dòng cuối cùng là 3.

jQuery index() method documentation

+0

Cảm ơn bạn đã chỉnh sửa, Reigel – Erik

1

Phương thức index nên làm những gì bạn muốn.

1
$(function() { 
    $('ul li a').live('click', function() { 
     var parent = $(this).parent('li'); 
     alert(parent.prevAll('li').size()); 
    }); 
}); 
+1

cách tiếp cận tiểu thuyết, nhưng tôi tưởng tượng index() là nhanh hơn. – Erik

2

bạn có thể lấy chỉ số của một phần tử với jquery`s index

$('ul li a').live('click', function() 
{ 
    var index = $(this).index(); 
});  
+1

Sử dụng '$ (this) .index()' thay vì '$ (this) .parent ('li'). Index()' .. Tuyệt vời !!!! – Prabs

+0

Điều này cung cấp cho bạn một phần tử không phải là phần tử li .. vì vậy hãy sử dụng parent() để lấy chỉ mục của li như câu trả lời đúng cho thấy. – numediaweb

2

Không cần phải jQueryfy điều này:

$('ul li a').live('click', function() { 
    var position = 0; 
    var currentNode = this; 
    var firstNode = currentNode.parentNode.firstChild; 
    while(firstNode != currentNode) { 
     position++; 
     currentNode = currentNode.previousSibling; 
    } 
    alert(position); 
}); 
+1

Nếu không cần phải "jQueryfy", thì tại sao sử dụng _some_ jQuery (bộ chọn), nhưng không tận dụng hết ..? – peirix

+1

Vì áp phích đầu tiên đã sử dụng jQuery để đính kèm sự kiện của mình. Nhưng để có được một số vị trí bằng cách sử dụng chức năng của $ (trong đó, nếu tôi không sai, làm nhiều hơn lựa chọn những thứ) có thể là một chút quá nhiều. jQueryfy những thứ không giống nhau trong một số trình duyệt (chọn CSS, xử lý sự kiện, v.v.) nhưng sử dụng javascript đơn giản, di động và nhanh khi có thể. – Arkh

+0

Điều này không phải lúc nào cũng đưa ra câu trả lời giống như 'index()' của jQuery, vì nó không lọc các phần tử thực tế và sẽ bao gồm các nút văn bản/nhận xét trong số đếm. Có thể sử dụng 'firstElementChild' và' previousElementSibling' tùy thuộc vào hỗ trợ trình duyệt dự định. –

1

Tôi biết đây là một bài đăng cũ, nhưng .live hiện không còn được dùng trong jQuery 1.7 và bị loại bỏ trong jQuery 1.9.

Cách khác là sử dụng .delegate:

$('ul li').delegate('a','click', function() { 

    alert($(this).parent('li').index()); 

}); 
Các vấn đề liên quan