理想情况下,您会在服务器端输出此类,但如果您做不到…
假设您有这样的导航
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about/">About</a></li>
<li><a href="/clients/">Clients</a></li>
<li><a href="/contact/">Contact Us</a></li>
</ul>
</nav>
并且您在以下 URL 上:
http://yoursite.com/about/team/
您希望关于链接获得一个“active”类,以便您可以直观地指示它是活动导航。
$(function() {
$('nav a[href^="/' + location.pathname.split("/")[1] + '"]').addClass('active');
});
本质上,这将匹配导航中 href 属性以“/about”(或任何二级目录)开头的链接。
我一直努力尝试让类似的东西在模板化的 HTML 网站上工作(服务器端 CSS 更新不可用)。菜单的结构比您的示例复杂一些。您的 CSS 技巧是否适用于这种结构?如果是,请务必告诉我,因为我卡住了。
纯 Javascript
酷!!!
另一种方式
这是基于 innerText URL 的正确替代版本
`
function setNavigation() {
let current_location = location.pathname.split(‘/’)[1]
if (current_location == ”) {
current_location = ‘home’
}
}
setNavigation()
`
感谢您的所有内容
谢谢 Chris!简单、清晰且流畅。击掌!
谢谢!我一直想要这样的东西:)
它运行得很好,但有一个例外。在主页上,类被添加到所有链接中。它们都以 / 开头。任何帮助都会不胜感激。
简单的解决方法:不要在主页文件上使用脚本。Duh。:)
尝试用 href$= 替换 hrefˆ=
ˆ= 值以开头
$= 值以结尾
这就是我为适应“home”页面或“index”所做的操作。
if (location.pathname !== '/') {
$("a[href*='" + location.pathname + "']").addClass("current");
} else {
var home = document.getElementById("home").getElementsByTagName('a')[0];
home.className = 'current';
}
希望这有帮助。
我的导航中没有“/”,因此代码在主页上为我的所有链接添加了“active”类。在我的情况下,我做了以下操作,以便我的“/”路径不会运行代码
确实。以及例如被调用为 /about en /aboutsome 的页面,在您按下“about”时也都是“active”。对此有没有什么解决方案,比如某种精确匹配?
嗨,
我无法使上述选择器工作,但使用了这个(特定于 PHP 的解决方案)来匹配当前 URL。
希望这能帮到某人(尚未经过彻底测试,因此可能有一些限制/意外结果)。
$(‘nav a[href=””]’).addClass(‘active’);
我上面的评论删除了 PHP,所以我将调整它,您在使用它时必须使用常识。
$('nav a[href="<?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ? >"]').addClass('active');
嗨,
我在这里是新手,您能提供一个有效的示例吗?
谢谢。
嗨,伙计们 - 有人知道如何使用绝对 URL(整个 URL)做到这一点吗?
我相信这很容易做到,但我真的不知道从代码的哪个地方开始...
谢谢,
Luke
Chris,你能为此提供一个小型演示吗?
是的,这很有用……
两个简单的问题
如果我的 URL 是动态的,我应该如何调整 javascript 的锚部分?
是否有纯 css 方法来显示上面显示的活动状态?我只是想问一下。我会为非 js 查看者使用悬停效果,以防有人想知道。
我的情况类似,但有所不同。当非子文档处于活动状态时,我需要使用活动类来定位特定的导航元素。有什么想法可以做到这一点吗?
我实现了一个略有不同的方法。我试图找到与 URL 和当前位置最匹配的选项。为此创建了一个 jQuery 插件 https://github.com/Vitaa/ActiveNavigation
运行得很好,非常感谢!
你好!
我找到了一个用于在我的共享菜单上设置活动(当前)类的例程,但我需要修改它以仅设置父链接,而不是“最近”链接。它在没有子菜单的菜单项上运行良好,但在单击子菜单项后,页面加载后主菜单没有指示。(我需要修改的代码如下)
您是否可以展示如何在 PHP 中执行此操作?
TKX
Vita
快速更新,不确定是否有人说过,但如果您希望将它与将首页链接作为“/”一起使用
只需在 else 中对您的 home li 或 a 标签做一些区分即可。
非常感谢您分享这个!帮助我很多;)
非常感谢!帮助我很多!
我使用原生 JS 有这个解决方案,但我遇到了问题。URL 中的哈希(#)比活动类更改得慢。所以我单击第一个链接,什么也没有发生,然后我单击第二个链接,第一个链接获得了活动类。
嗨,
我有一个相反的情况。
如果我不想在子菜单项处于活动状态时突出显示父菜单怎么办?
例如
关于我们 - 无颜色
– 链接 1
– 链接 2(当前处于活动状态):希望它有某种颜色
有什么线索吗?
非常感谢
试试这个。
我试了这段代码,效果很好。
谢谢 Aryan,你的代码对我非常有用。
它起作用了!!感谢你的分享
很棒的帖子和技巧。我会在这里留下我的贡献。对于那些在使用参数匹配 URL 时遇到问题的人,这里有一个解决方案(代码将 CLASS 添加到父 LI 标签,而不是像原始帖子那样添加到 A 标签)
$(function() {
var url = window.location.href; url = url.replace(/^.*\/\/[^\/]+/, ”);
$(‘nav a[href$=”‘ + url + ‘”]’).closest(‘li’).addClass(‘active’);
});
更短的语法(在这种情况下,我将 active 类应用于 li,而不是 a)
let loc = location.pathname.split(“/”)[1];
document.querySelector(‘nav a[href^=”/’ + loc + ‘”]’).closest(‘li’).classList.add(‘active’);
或者,你可以尝试以下方法
嗨,Chris,
我有一个菜单,其中所有链接都是唯一的域名。我使用类似于您的方法,它效果很好
但问题是,如果地址栏 = http://www.mysite.com,它就起作用,但如果地址栏 = mysite.com/cat/,它就不起作用。
我需要我的方法只读取域名,忽略其后的任何内容。
有什么想法吗?
jQuery(document).ready(function($){
// 获取当前路径并查找目标链接
var path = window.location.pathname.split(“/”).pop();
// 考虑路径为空的主页
if ( path == ” ) {
path = ‘index.php’;
}
var target = $(‘nav a[href=”‘+path+'”]’);
// 将 active 类添加到目标链接
target.addClass(‘active’);
});