添加&从导航链接中删除活动类

时间:2011-12-05 00:33:34

标签: javascript jquery navigation addclass removeclass

我一直在寻找有关如何在链接中添加和删除类的教程,但遗憾的是没有成功。所有早期的问题都给了我一些理解,但没有给我我想要完成的结果。

我正在尝试通过在单击链接时添加和删除类来为我的导航设置活动状态。

以下是我对JavaScript的看法:

$(document).ready(function(){

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

        });
    });
});

这是我的导航:

<div id="nav">
    <div id="main-nav" class="center">
        <ul>
            <li><a href="/photography.php">Photography</a></li>
            <li><a href="/web.php">Web</a></li>
            <li><a href="/print.php">Print</a></li>

            <li class="nav-R"><a href="/about.php">About</a></li>
            <li class="nav-R"><a href="/contact.php">Contact</a></li>
        </ul>
    </div><!-- close center -->
</div><!-- close-nav -->

4 个答案:

答案 0 :(得分:16)

您要从最近的li子元素中删除“有效”类,然后将活动类添加到当前a的父级li 。本着将活动类保留在锚点上而不是列表项的精神,这对您有用:

    $('li a').click(function(e) {
        e.preventDefault();
        $('a').removeClass('active');
        $(this).addClass('active');
    });

活动链接是活动链接。在任何给定时间都不会有多个链接处于活动状态,因此没有理由去除active类。只需从所有锚点中删除即可。

演示:http://jsfiddle.net/rq9UB/

答案 1 :(得分:1)

尝试:

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

    });
});

您的选择器正在查看当前($(this)a元素的父元素,然后在该元素的子元素中查找a。该元素中唯一的a是您刚刚点击的那个。

我的解决方案向上移动到最近的ul,然后找到element that currently has the class of有效,然后移除该类。

此外,您发布的方法是将active类名添加到li元素,并且您希望从a元素中删除类名。我的方法使用li,但可以修改为使用a,只需从最后一行删除parent()

参考文献:

答案 2 :(得分:0)

我想你想要:

$this.parents("ul").find("a").removeClass('active');

答案 3 :(得分:0)

试试这个:

$(function() {
    $('.start').addClass('active');
        $('#main-nav a').click(function() {
        $('#main-nav a').removeClass('active');
        $(this).addClass('active');             
   });
});

只需将类.start添加到您希望拥有类.active first的nav元素。

然后在你的css中声明类.active,如:

#main-nav a.active {

/* YOUR STYLING */

}