2012-05-05 33 views
4

如果我有一個HTML結構,如:使用jQuery查找小孩的索引?

<div id="parent"> 
<div class="child first"> 
    <div class="sub-child"></div> 
</div> 

<div class="child second"> 
    <div class="sub-child"></div> 
</div> 

<div class="child third"> 
    <div class="sub-child"></div> 
</div> 
</div> 

,我必須通過($('#parent.child')).click()定義一個單擊處理程序,然後我點擊與類的second股利(都被簡單地添加first, second, third類,使演示更加清晰)有沒有簡單的方法來獲得數字1,因爲它是第二個孩子? (基於0的索引)?

喜歡的東西$(this).index

+0

對不起,我想念知道有..我想你想點擊的第二個div,然後不知怎麼知道它是第二個div在事件處理代碼中? – gordatron

+0

檢查此頁上的第一個示例http://api.jquery.com/index/ ...希望它有幫助 –

+0

'#parent .child'將是正確的選擇器。 – kapa

回答

10

只是看看jQuery的API。你建議,index的方法,是完全正確的:

$('#parent .child').click(function() { 
    var index = $(this).index(); 
}); 

從文檔:

如果沒有參數傳遞給的.index()方法,返回值是 一個整數,指示第一個元素在 jQuery對象中的相對於其同級元素的位置。

另請注意,我已經從示例中稍微改變了選擇器。我猜這只是你問題中的一個錯字。 #parent.child將查找ID爲「parent」和類爲「child」的元素,但實際上您想要#parent .child(注意空間)查找具有ID爲「parent」的元素後代的具有「child」類的元素。

+0

這傢伙建議使用委託:http ://stackoverflow.com/a/4996037/359135但基本上有相同的答案 – gordatron

+2

@gordatron - 更高的DOM樹上的事件委託可能會更好,但我使用'click',因爲這是什麼OP使用在問題中。另外請注意,自從jQuery 1.7開始,'delegate'已被'on'取代。 –

+0

很酷..感謝您的信息! – gordatron

2

index()方法可用於獲取集合中元素的位置。在基本情況下,$(this).index()應該工作。

但是對於更具體的收藏,您可以通過collection.index(item)獲得該職位。想象一下,在你的#parent中添加一些簡單的東西,在測量index()(一個span,img,任何東西)時都不應該被計算在內。用簡單的方法,你的代碼可能會破壞,但是使用特定的方法,它不會。

像這樣的東西應該爲你工作:

var $children = $('#parent .child').click(function​() { 
    console.log($children.index(this)); 
});​ 

jsFiddle Demo