6

我想要完成的只是能够拥有一个单击链接的无序列表,父列表项被分配为“活动”类。在该列表中单击另一个链接后,它会检查是否分配了“活动”,将其从该列表项中删除,并将其添加到最近单击的链接父列表项中。

例子:

第一步 - 用户点击了链接“我是链接二”

<ul>
<li><a href="#">I am link one</a></li>
<li class="active"><a href="#">I am link two</a></li>
</ul>

第二步 - 用户现在点击了链接“我是链接一”

<ul>
<li class="active"><a href="#">I am link one</a></li>
<li><a href="#">I am link two</a></li>
</ul>

很简单,但是我打败了我。

4

3 回答 3

10

假设:UL 元素具有类“linksList”。

$('.linksList li a').click(function()
{
  $('.linksList li').removeClass('active');
  $(this).parent().addClass('active');
});
于 2009-08-11T21:11:25.997 回答
7

像下面这样的事情应该这样做

$(function() {
    $('li a').click(function(e) {
        e.preventDefault();
        var $this = $(this);
        $this.closest('ul').children('li').removeClass('active');
        $this.parent().addClass('active');
    });
});

工作演示

于 2009-08-11T21:10:40.773 回答
1

这个问题现在有点老了,但我认为还有改进的空间。

“传统”本地事件绑定:

$("ul a").click(function(){
    $(this).parent("li").addClass("active")
        .siblings().removeClass("active");

    # return false to cancel the default action (e.g. follow the link):
    return false;
});

现在,通过 delegate() (jQuery +1.4.2) 使用事件委托也是如此。让您动态添加额外的 >li>a 而无需重新绑定事件:

$("ul").delegate("a", "click", function(){
    $(this).parent("li").addClass("active")
        .siblings().removeClass("active");

    # return false to cancel the default action
    # and prevent it from bubbling (further) up:
    return false;
});

将“ul”更改为仅匹配所需列表的任何内容,例如“.linksList”、“#nav”等。

于 2010-12-09T22:33:03.687 回答