2010-05-28 68 views
14

我有一個標準列表...查找點擊數裏

 <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> 

而且我的jQuery:

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

我想找出是父李在的列表中的位置點擊鏈接,例如點擊等3會給我2,等4會給3等

任何想法?

回答

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

會給你你想要的東西,但請記住,這些都是基於0的指標 - 即第一行項指數0,最後一行產品3

jQuery index() method documentation

+0

感謝您的編輯,Reigel – Erik 2010-05-28 09:18:09

1

index方法應該做你想做的。

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

新穎的方法,但我想象指數()更快。 – Erik 2010-05-28 08:40:35

2

你可以得到一個元素的索引與jquery`s index

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

使用'$(this).index()'而不是'$(this).parent('li')。index()'.. Great !!!! – Prabs 2016-03-30 07:04:41

+0

這給你一個元素不是li元素..所以使用parent()來獲得li的索引,正如正確的答案所暗示的那樣。 – numediaweb 2016-10-02 12:12:25

2

無需jQueryfy此:

$('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

如果不需要「jQueryfy」,那麼爲什麼要使用_some_ jQuery(選擇器),但不能充分利用..? – peirix 2010-05-28 08:57:42

+1

因爲第一個海報已經使用jQuery來附加他的事件。 但是爲了得到一些使用$的函數的位置(如果我沒有錯的話,不僅僅是選擇東西)可能會有點太多。 jQueryfy在某些瀏覽器(CSS選擇,事件處理等)中不一樣的東西,但在可能的情況下使用簡單,便攜和快速的JavaScript。 – Arkh 2010-05-28 09:46:24

+0

這並不總是給出與jQuery的'index()'相同的答案,因爲它不會過濾實際元素,並且會在count中包含文本/註釋節點。根據預期的瀏覽器支持,可以使用'firstElementChild'和'previousElementSibling'。 – 2013-04-29 06:15:43

1

我知道這是舊的文章,但.live現在已經過時,在jQuery的1.7和1.9的jQuery刪除。

的替代方法是使用.delegate

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

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

});