【问题标题】:Set menu item active based on URL根据 URL 设置菜单项处于活动状态
【发布时间】:2015-12-02 10:21:38
【问题描述】:

我一直在非常努力地完成我想要完成的事情,但我无法让它按照我想要的方式工作。我有一个带有一级菜单项(duh)和二级菜单项的导航菜单。它看起来像这样:

<ul class="nav" id="side-menu">
    <li>
        <a href="/admin/">Dashboard</a>
    </li>
    <li>
        <a href="/admin/pages/">Pages</a>
    </li>
    <li>
        <a href="#">Users<span class="fa arrow"></span></a>
        <ul class="nav nav-second-level">
            <li>
                <a href="/admin/users/">All users</a>
            </li>
            <li>
                <a href="/admin/users/roles/">Roles</a>
            </li>
        </ul>
    </li>
</ul>

我正在使用以下 jQuery 函数将 active 类添加到活动菜单项:

function setActive() {
    var url = window.location;
    var element = $('ul.nav a').filter(function() {
        return this.href == url || url.href.indexOf(this.href) == 0;
    }).addClass('active').parent().parent().addClass('in').parent();

    if (element.is('li')) {
        element.addClass('active');
    }
    // Remove active class from A element if the page isn't the dashboard.
    if (location.pathname !== '/admin/' && $('[href="/admin/"]').hasClass('active')) {
        $('[href="/admin/"]').removeClass('active');
    }
};

这适用于所有一级菜单项和二级菜单项All users,但是当我转到/admin/users/roles/ 时,它使All usersRoles 处于活动状态。当我转到/admin/users/roles/add/ 时也会发生同样的事情。我认为这是因为代码使所有看起来像window.location 的菜单项都处于活动状态,但是当我转到/admin/users/roles//admin/users/roles/add/ 等时,我不知道如何只使Roles 处于活动状态。

我真的希望有人可以帮助我解决这个问题。如果可以,我请你喝啤酒。

【问题讨论】:

    标签: javascript jquery drop-down-menu menu submenu


    【解决方案1】:

    试试这个..

    var loc = window.location.pathname;
    
       $('#side-menu').find('a').each(function() {
         $(this).toggleClass('active', $(this).attr('href') == loc);
      });
    

    并且在href i.e.http://yourdomain.com//admin/users/roles/中使用完整的绝对路径

    【讨论】:

    • 谢谢!当我现在转到/admin/users/roles/ 时,它只会使Roles 处于活动状态,这很好。但是当我到达/admin/users/roles/add/ 时,它什么也没做。有什么建议吗?
    • 我使用了你的代码。您可以在我的第一篇文章中找到我使用的其他代码。
    • 确保您的/admin/users/roles/add/href 中,然后它会起作用。
    • 没错,但用户只能通过点击/admin/users/roles/ 上的Add role 按钮来访问/admin/users/roles/add/。所以我不想在我的导航菜单中包含/admin/users/roles/add/,但是当用户转到/admin/users/roles/add//admin/users/roles/ 必须处于活动状态。这可能吗?
    • 你可以在上面的代码之后使用这种类型的 if 条件来处理特殊情况。if (url == '/admin/users/roles/add/'){//add active class to admin/users/roles/ }
    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2013-07-26
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多