我是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应用程序。
再次感谢。
答案 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 -->