首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"INSPINIA“管理主题的活动侧菜单

"INSPINIA“管理主题的活动侧菜单
EN

Stack Overflow用户
提问于 2018-10-28 08:12:20
回答 3查看 2.1K关注 0票数 1

我希望使用JavaScript突出显示侧栏菜单上的活动页面。我使用的是[医]天麻主题。

我试过使用JavaScript,它在普通菜单中运行得很好。但它不适用于子菜单。我想为子菜单显示in类而不是active类。请检查我的密码并帮助我。

HTML

代码语言:javascript
复制
<nav class="navbar-default navbar-static-side" role="navigation">
   <div class="sidebar-collapse">
      <ul class="nav metismenu" id="side-menu">
         <li>
            <a href="dashboard.html"><i class="fa fa-th-large"></i><span class="nav-label">Dashboards</span></a>
         </li>
         <li>
            <a href="#"><i class="fa fa-building"></i><span class="nav-label">Company</span><span class="fa arrow"></span></a>
            <ul class="nav nav-second-level collapse">
               <li><a href="addcompany.html">Add Company</a></li>
               <li><a href="#">View Company</a></li>
            </ul>
         </li>
         <li>
            <a href="mailbox.html"><i class="fa fa-envelope"></i><span class="nav-label">Person</span><span class="fa arrow"></span></a>
            <ul class="nav nav-second-level collapse">
               <li><a href="addperson.html">Add Person</a></li>
               <li><a href="#">View Person</a></li>
            </ul>
         </li>
      </ul>
   </div>
</nav>

JavaScript

代码语言:javascript
复制
$(document).ready(function () {
    var url = window.location;
    // for sidebar menu but not for metismenu submenu
    $('ul.metismenu a').filter(function () {
        return this.href == url;
    }).parent().siblings().removeClass('active').end().addClass('active');
    // for metismenu which is like a submenu
    $('ul.nav-second-level a').filter(function () {
        return this.href == url;
    }).parentsUntil(".metismenu > .nav-second-level").siblings().removeClass('active').end().addClass('active');
});

预期产出

代码语言:javascript
复制
<li class="active">
   <a href="#"><i class="fa fa-building"></i><span class="nav-label">Company</span><span class="fa arrow"></span></a>
   <ul class="nav nav-second-level collapse in">
      <li><a href="addcompany.html">Add Company</a></li>
      <li><a href="#">View Company</a></li>
   </ul>
</li>

实际输出

代码语言:javascript
复制
<li class="active">
   <a href="#"><i class="fa fa-building"></i><span class="nav-label">Company</span><span class="fa arrow"></span></a>
   <ul class="nav nav-second-level collapse active">
      <li><a href="addcompany.html">Add Company</a></li>
      <li><a href="#">View Company</a></li>
   </ul>
</li>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-28 08:31:43

我找到了答案。

代码语言:javascript
复制
$(function() {
    setNavigation();
});

function setNavigation() {
    var path = window.location.pathname;
    path = path[0] == '/' ? path.substr(1) : path; //it will remove the dash in the URL

    $("ul.metismenu a").each(function() {
        var href = $(this).attr('href');
        if (path.substring(0, href.length) === href) {
            $(this).closest('li').addClass('active');
        }
    });

    $("ul.metismenu .nav-second-level a").each(function() {
        var href = $(this).attr('href');
        if (path.substring(0, href.length) === href) {
            $(this).parent().parent().closest('li').addClass('active');
            $(this).closest('ul').addClass('in');
        }
    });
}
票数 2
EN

Stack Overflow用户

发布于 2020-01-31 16:41:58

你的功能不起作用。相反,使用这个:

代码语言:javascript
复制
$(function(){
    var current = location.pathname;

    $('ul.metismenu li a').each(function(){
        if($(this).attr('href').indexOf(current) !== -1){
            $(this).closest('li').addClass('active');
        }
    });

    $('ul.metismenu .nav-second-level a').each(function(){
        console.log($(this).attr('href').indexOf(current));
        if($(this).attr('href').indexOf(current) !== -1)  {
            $(this).parent().parent().closest('li').addClass('active');
            $(this).closest('ul').addClass('in');
        }
    });
});
票数 1
EN

Stack Overflow用户

发布于 2020-04-02 22:39:23

acmsohail的回答帮助了我,但我发现了一个问题,如果有两个urls以相同的方式启动,一个扩展最大的urls将显示两个选定的urls。然后,我留下了接受正确元素的代码。

代码语言:javascript
复制
 function setNavigation() {
    var path = location.href;
    var lstElem = [];
    var classIndex;
    path = path[0] == '/' ? path.substr(1) : path;

    $("ul.metismenu a").each(function (i,e) {
        var href = $(this).attr('href');
        if (path.substring(0, href.length)  === href) {

            lstElem.push({
                element : e,
                count : href.length
            })

        }
    });

    if(lstElem.length > 0)
    {
        //i get the element with max length
        classIndex = $(lstElem.reduce(function(prev, current) {
            return (prev.count > current.count) ? prev : current
        })["element"]);

        classIndex.closest('li').addClass('active');

        lstElem = [];            
    }

    $("ul.metismenu .nav-second-level a").each(function () {
        var href = $(this).attr('href');
        if (path.substring(0, href.length) === href) {
            lstElem.push({
                element : e,
                count : href.length
            })
        }
    });

    if(lstElem.length > 0)
    {
        classIndex = $(lstElem.reduce(function(prev, current) {
            return (prev.count > current.count) ? prev : current
        })["element"]);

        classIndex.parent().parent().closest('li').addClass('active');
        classIndex.closest('ul').addClass('in');
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53029552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档