2011-09-07 90 views
5

我想知道如何「遠」地離開DOM中的單擊元素到某個其他元素。計算「this」和「that」元素之間的元素數

<li>item1</li> 
<li>item2</li> 
<li class="active">item3</li> 
<li>item4</li> 
<li>item5</li> 
<li>item6</li> 
<li>item7</li> 

因此,當一個用戶點擊一個元素它應該的距離返回到有源元件:所以item1: return -2item4: return 1item6: return 3,等等。

+0

http://stackoverflow.com/questions/13875 60/find-number-of-nodes-between-elements-with-jquery –

+0

@Marcus - 它不一樣。 –

+0

除了^之外,你總是可以得到一個元素列表,然後遍歷它,爲每個元素遞增一個計數器,然後當你點擊你需要的元素時就會破壞。 –

回答

6

我相信你能做到這一點的方法index() ...

事情是這樣的:

var value = $('li').index() - $('li.active').index(); 
+0

簡單而甜美!在「click」函數中進行小的修改:'$(this).index() - $(this).siblings(「.active」).index()' – peirix

+1

@peirix如果用戶點擊活動LI,那麼'$(this).siblings(「.active」).index()'將返回'-1',所以計算將是不正確的。在你的特定情況下,點擊活動的LI會返回'3'('2 - (-1)= 3'),就像item6被點擊一樣... –

+0

已經有一個在代碼的早期點檢查,因此如果單擊「活動」,它將不會運行此代碼。但感謝您指出,很高興知道(: – peirix

2

在這裏你去:

$(ul).delegate('li', 'click', function() { 
    var idx1 = $(this).index(), 
     idx2 = $(this).siblings().andSelf().filter('.active').index(); 

    var distance = idx1 - idx2; 

    // do stuff with distance 
}); 

現場演示:http://jsfiddle.net/aeEBP/