1

我需要获取可能嵌套在另一个 UL 中的单击列表项的索引号。

除嵌套 UL 的情况外,该代码工作正常。由于您同时单击父 LI 和子 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 );

我正在尝试展平层次结构以创建顺序导航(幻灯片和键绑定将绑定到此索引号)。因此,我想要的数字本质上是您为 LI 获得的数字,如果列表是平的。

谢谢!

4

1 回答 1

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

演示

此外,如果您在其上应用 active ,li它将覆盖其所有子项的样式,相反,您可以将样式应用于锚点,如果您希望锚点覆盖整个宽度,只需提供锚点的样式display:block

li > a{
    display:block;
}

演示

于 2013-11-04T20:32:37.770 回答