使用jQuery问题向菜单添加活动类

时间:2019-03-07 05:24:33

标签: javascript jquery

我是Jquery / JS的新手,仍然在学习。我需要在菜单中添加一个“活动”类。我知道该论坛和网络上已经存在许多类似的问题,但是没有任何效果。它困扰了我好几天,但我仍然无法找出问题所在。

这是我的HTML:

<nav id="nav-menu-container">
  <ul class="nav-menu">
    <li class="menu-active"><a href="/site/index">Home</a></li>
    <li><a href="/site/about">About</a></li>
    <li><a href="/site/news">News</a></li>
    <li><a href="/site/contact">Contact</a></li>
    <li><a href="/site/login">Login</a></li>
  </ul>
</nav><!-- #nav-menu-container -->

这是我添加类的代码:

    $('.nav-menu a, #mobile-nav a').on('click', function() {
 if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
    if ($(this).parents('.nav-menu').length) {
           $('.nav-menu .menu-active').removeClass('menu-active');
           $(this).closest('li').addClass('menu-active');
        }

     if ($('body').hasClass('mobile-nav-active')) {
              $('body').removeClass('mobile-nav-active');
              $('#mobile-nav-toggle i').toggleClass('fa-times fa-bars');
              $('#mobile-body-overly').fadeOut();
            }
            return false;
          }

    });

对不起,我之前没有详细解释。我希望链接菜单重定向到另一个页面。该代码最初来自我使用的单页Web主题,但是我对其进行了自定义以适合我的多页Web应用程序。

再次感谢。

4 个答案:

答案 0 :(得分:0)

您可以这样做:

$('.nav-menu').on('click', function (e) {
  e.preventDefault();
  $('.nav-menu .menu-active').removeClass('menu-active');
  $(e.target).parent('li').addClass('menu-active');
});
li.menu-active a {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav id="nav-menu-container">
  <ul class="nav-menu">
    <li class="menu-active"><a href="/site/index">Home</a></li>
    <li><a href="/site/about">About</a></li>
    <li><a href="/site/news">News</a></li>
    <li><a href="/site/contact">Contact</a></li>
    <li><a href="/site/login">Login</a></li>
  </ul>
</nav>

答案 1 :(得分:0)

如果您有多个页面,请尝试此操作。下面的代码激活当前页面的菜单 这样的话。

    <nav id="nav-menu-container">
      <ul class="nav-menu">
        <li><a href="/index">Home</a></li>
        <li><a href="/about">About</a></li>
        <li><a href="/news">News</a></li>
        <li><a href="/contact">Contact</a></li>
        <li><a href="/login">Login</a></li>
      </ul>
    </nav><!-- #nav-menu-container -->

<script>
        $(function() {
          $('nav a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('menu-active');
        });
</script>

答案 2 :(得分:0)

<div id="side-bar">
<ul>
    <li><a href="xtz.com">Home</a></li>
    <li><a href="#">Who we are</a></li>
    <li><a href="#">Services</a></li>
    <li><a href="#">What to expect</a></li>
    <li><a href="#">Representative clients</a></li>
    <li><a href="#">Success stories</a></li>
    <li><a href="#">Current litigation</a></li>
    <li><a href="#">What if you could not be a doctor?</a></li>
</ul>
</div>

脚本

$(document).ready(function () {
    alert(localStorage.getItem("selectedolditem"));
                $("#side-bar a").click(function () {
                    var id = $(this);

                    $(".active").removeClass("active");
                    $(id).addClass("active");
                    localStorage.setItem("selectedolditem", $(id).text());
                   alert(localStorage.getItem("selectedolditem"));
                });

                var selectedolditem = localStorage.getItem('selectedolditem');

                if (selectedolditem !== null) {

                    $("a:contains('" + selectedolditem + "')").addClass("active");
                }
            });

css

.active {color:red;}

答案 3 :(得分:0)

这是它与localStorage一起工作的方式。 恐怕该代码段工具不允许使用localStorage,因此您必须在此处查看其工作情况: https://repl.it/@PaulThomas1/BraveOffbeatByte

document.addEventListener('DOMContentLoaded', () => {
  // try and load
  if (localStorage) {
    let active = localStorage.getItem('activeMenu');
    if (active) document.querySelector(`a[class="${active}"]`).classList.add('active');
  }
});

document.addEventListener('click', (e) => {
  // try and save
  if (e.target.matches('a') && localStorage) {
    localStorage.setItem('activeMenu', e.target.className);
  }
});
<nav id="nav-menu-container">
  <ul class="nav-menu">
    <li class="menu-active"><a href="/site/index" class="home">Home</a></li>
    <li><a href="/site/about" class="about">About</a></li>
    <li><a href="/site/news" class="news">News</a></li>
    <li><a href="/site/contact" class="contact">Contact</a></li>
    <li><a href="/site/login" class="login">Login</a></li>
  </ul>
</nav>
<!-- #nav-menu-container -->