2013-11-04 72 views
1

我需要獲取單擊列表項的索引號,它可能嵌套在另一個UL中。jquery順序導航

該代碼工作正常,除了嵌套UL的情況下。由於您同時點擊父母和孩子LI,因此會返回兩個結果。當我嘗試使用錨標記而不是LI時,結果爲-1,因爲錨在LI內。

小提琴:http://jsfiddle.net/4Ww9C/

代碼:

(function($) { 
    var manifest = $('#manifest li'); 
    manifest.click(function(e){ 
     $(this).addClass("active"); 
     manifest.not(this).removeClass('active'); 
     var selected = $(".active"); 
     var pos = manifest.index(selected); 
     alert (pos); 
    }); 

}) (jQuery); 

我想扁平化層級創造一個連續的導航(幻燈片和鍵聯結將被捆綁到這個索引號)。所以我想要的數字基本上就是你得到的數量,如果列表是平的。

謝謝!

回答

4

活動傳播給其父母。您需要停止傳播,您可以使用e.stopPropagation(),以便它不會導航到其父級的單擊事件(這會導致多個警報)。

manifest.click(function (e) { 
     e.stopPropagation(); 

..... 

嘗試:

(function ($) { 
    var manifest = $('#manifest li'); 
    manifest.click(function (e) { 
     var $this = $(this), 
      pos; 
     e.stopPropagation(); 
     manifest.find('.active').not($this.children('a').addClass("active")).removeClass('active'); 
     pos = manifest.index($this); 
     alert(pos); 
    }); 
})(jQuery); 

Demo

此外,如果你申請活躍li它將覆蓋所有的兒童的風格爲好,而是你可以應用該樣式錨點,如果你想錨點覆蓋整個寬度,只需提供錨點的風格爲display:block

li > a{ 
    display:block; 
} 

Demo

+0

這會有所幫助,但活動類還是行爲有點滑稽,如果我選擇的第一個列表項。有沒有更好的方法,可能使用錨? http://jsfiddle.net/4Ww9C/6/ –

+0

@JenniferMichelle是應用它錨定。我將用演示更新。 – PSL

+0

@JenniferMichelle這樣? http://jsfiddle.net/jpH29/ – PSL