2012-05-08 20 views
0

我有一段HTML的,當JQM與它做,看起來像這樣(簡化):jQuery和JQM - 使用最接近有過濾器,以獲得指數

<div id="servicesList"> 
    <div id="servicesHeader">Services</div> 
    <ul data-role="listview" class="ui-listview"> 
     <li id="Serv1" class="serviceLink">Service 1</li> 
    </ul> 
    <ul data-role="listview" class="ui-listview"> 
     <li id="Serv2" class="serviceLink">Service 2</li> 
    </ul> 
</div> 

這段代碼動態地從另一個生成一塊腳本。

每個服務都有一個附加到它的點擊事件,可以動態地提取更多的數據。理想情況下,我希望能夠在點擊該服務時引用該服務的索引。這裏是我當前的代碼:

$('.serviceLink').click(function() { 
    var index = $(this).closest("ul").index(); 
    servAnimate(index); 
}); 

很顯然,這是行不通的對象數組拉到包括servicesHeader股利。我如何才能獲得只有父母ul的數組?實際上,當用戶點擊服務1時,返回的索引應該是0,而不是1.現在,索引0引用servicesHeader div。

我也試過這樣:

$(this).closest("ul").filter("ul").index(); 

任何幫助,將不勝感激!

編輯:我應該指定HTML是由另一個開發人員的腳本生成的。它可能會改變,它可能保持不變。我迄今爲止唯一的保證是UL將保持在同一級別,並且將具有serviceLink類。

那麼,我怎麼才能得到父UL的索引,而不管其他的兄弟元素是否存在?

回答

0

感覺像一個失敗者回答我自己的問題!

我很習慣僅使用index()本身,我忘了你可以添加限定符。另外,我假設(並告訴所有回答者)我必須從單擊元素向後工作並找到其位置。我所做的就是根據我知道不會改變的東西(容器div ID和每個鏈接周圍的結構)構建元素列表,並從中獲取單擊元素的索引:

$('.serviceLink').click(function() { 
    var index = $('#servicesList ul[data-role="listview"] li.serviceLink').index(this); 
    servAnimate(index); 
}); 

我很欣賞everone在這方面的幫助。

0

引入另一個包裝服務列表的DIV - 即UL。然後,.closest('div')會發現這個新的div,索引將從零開始。

編輯:

試試這個:

DEMO

+0

我會,但我無法控制的標記,除了ULs將始終在同一個div和指出,可能有其他兄弟元素在同一個div將混亂的數組。 –

+0

我看到了問題。 –

+0

代碼和工作小提琴的鏈接添加。 –

1

除非我忽略了你的要求的東西,這將適合該法案?

$(function() { 
    $('#servicesList .serviceLink').on('click', function() { 
     alert($('.serviceLink').index(this)); 
    }); 
})​ 

這將返回0,當您單擊服務1,和1當您單擊服務2.

UPDATE:這隻能找到 「.serviceLinks」 主要格 「servicesList」 裏面

+0

只是一個問題。其他開發者已知可以在應用程序的其他部分重新使用類。 –

+0

這是相當詳細的,但你可以嘗試'var index = $(this).closest(「。serviceList」)。find(「ul」).index(this.closest(「ul」));'。 –

+0

那一個也沒有工作。不過感謝您的幫助! –

0

任何問題:

$('.serviceLink').click(function() { 
    var index = $(this).closest("ul").index() - 1; 
    alert(index); 
});​ 

看到http://jsfiddle.net/u4Hy4/

+0

這將工作,如果我知道100%的確定頭div將保持原來的位置,並沒有添加其他div(例如個別服務的節頭div)。 –