javascript - 使用 url 设置活动导航选项卡的 Jquery 函数选择的数量超出了应有的范围
问题描述
我有一个 Jquery 函数,用于在导航锚点上设置“活动”类,它使用 URL 来执行此操作。该函数在大多数情况下起作用,但问题是当Tab 1处于活动状态时,它也将选项卡10、11和12设置为活动。
下面的代码是我正在使用的,它page
在 console.log 中正确输出,它也适用于除项目 1 之外的所有其他链接,如屏幕截图所示。
$(function(){
var url = window.location.href;
var page = url.substr(url.lastIndexOf('/')+1 );
$('.nav-item a[href*="'+page+'"]').addClass('active');
console.log(page);
});
nav 相当大,所以我将分享一个精简版,请记住,中间 ul 实际上总共包含 12 个 Item,每个 item 共享 url
article.php?contentID=
之后=
是从 1 到 12 的项目编号。
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<ul class="navbar-nav" >
<li><a class="navbar-brand" href="articles.php">Twist</a></li>
</ul>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link " href="article.php?contentID=1">Item 1</a>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="commentary.php">Commentary</a>
</li>
<li>
<a id="logLink" class="nav-link" href="logout.php">Log out</a>
</li>
</ul>
</div>
</nav>
任何帮助将不胜感激,我很确定这很明显,但我只是没有看到。
提前致谢。
捻
解决方案
有趣的问题......关键是要让href$="='+page+'"
添加类的语句active
变为:
$('.nav-item a[href$="=' + page + '"]').addClass('active');
下面的工作片段- 更改页面的硬编码值以测试自己:
$(function() {
var url = window.location.href;
var page = 1 //url.substr(url.lastIndexOf('/')+1 );
$('.nav-item a[href$="=' + page + '"]').addClass('active');
console.log('looking for page#:', page);
});
a.nav-link.active {
background: lightgreen;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="container">
<h2>Nav</h2>
<p>Basic horizontal menu:</p>
<ul class="nav">
<li class="nav-item">
<a class="nav-link" href="#article.php?contentID=1">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#article.php?contentID=2">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#article.php?contentID=10">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#article.php?contentID=11">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#article.php?contentID=21">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
</div>
推荐阅读
- c++ - 覆盖另一个类的朋友的虚拟受保护方法
- c++ - 无法在 IPv4 和 IPv6 中将套接字绑定到端口
- asp.net-mvc - BeginForm 提交时总是调用 Index
- android - 我的工具栏未显示在 CardView 中
- python-requests - 构造一个 POST 请求
- c# - C# - postgresql - 随着时间的推移内存泄漏
- java - Android Studio 致命预期:主要 | 我找不到解决方案
- php - 从 html 按钮单击运行 PHP 脚本
- java - Guice - 字段注入返回 null
- html - div / span (a) 边框底部:不同大小的间隙