javascript - 如何使用基于当前 url 的 javascript 在 jsp 文件中设置 div 项的活动菜单状态?
问题描述
导航栏如下所示:
我在所有其他 jsp 文件中使用的 menu.jsp 代码在任何地方显示导航栏菜单:
menu.jsp 文件中的 css 代码
.topnav {
overflow: hidden;
background-color: #e9e9e9;
}
.topnav a {
float: left;
display: block;
color: black;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.topnav a.active {
background-color: #2196F3;
color: white;
}
menu.jsp 文件中的 html 代码
<div class="topnav">
<a class="btn active" href="${pageContext.request.contextPath}/">Home</a>
<a class = "btn" href="${pageContext.request.contextPath}/productList">Product List</a>
<a class = "btn" href="${pageContext.request.contextPath}/userInfo">My Account Info</a>
<a class = "btn" href="${pageContext.request.contextPath}/login">Login</a>
</div>
javascript代码:
<script>
var btnContainer = document.getElementsByClassName("topnav");
//Get all buttons with class="btn" inside the container
var btns = btnContainer.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
</script>
我已经在 Stackoverflow 和其他来源上尝试了几乎所有可用的解决方案,但到目前为止,它们都没有奏效。谁能告诉我如何解决这个问题?
解决方案
您可以使用forEach
循环a
标签并删除类,即:active
然后检查是否href
匹配当前 url,然后将活动类添加到该a
标签。
演示代码:
// var url = window.location.href;
var url = 'https://stacksnippets.net/login' //just for demo..
//loop through `a` remove active class from all if any
document.querySelectorAll('.topnav a').forEach(function(el) {
el.classList.remove("active")
});
document.querySelectorAll('.topnav a').forEach(function(el) {
//check if href matches url ..add active class theere
if (el.getAttribute('href') === url) {
el.classList.add("active")
}
})
.topnav {
overflow: hidden;
background-color: #e9e9e9;
}
.topnav a {
float: left;
display: block;
color: black;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.topnav a.active {
background-color: #2196F3;
color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="topnav">
<a class="btn active" href="https://stacksnippets.net/">Home</a>
<a class="btn" href="https://stacksnippets.net/productList">Product List</a>
<a class="btn" href="https://stacksnippets.net/userInfo">My Account Info</a>
<a class="btn" href="https://stacksnippets.net/login">Login</a>
</div>
推荐阅读
- ios - 我们如何将访问令牌传递给 Web 视图中的标头
- python - 如何更改最后一个数组维度?
- r - 如何在R中乘以不同大小列表的向量
- java - 如何修改使 IllegalArgumentException: column '_id' 不存在的光标
- c# - C# .NET WPF 窗口 Mousedown/Keydown 不会触发通过 USB 红外接收器连接的电视遥控器的 4 色按钮关闭
- excel - 读取 excel 时 Spark 出错:org.apache.poi.openxml4j.exceptions.InvalidFormatException
- splunk - Splunk Dropdown 基于来自字符串结果的字段
- java - 在 aws iot 中更新一个东西
- android - 系统对话框,如 ShowMessage,在 Android 上使用旧样式
- ruby - 由于以下原因返回 HTTP 503:请求队列已满(配置的最大大小:100)