我正在使用10项无序列表作为导航栏。使用SSI,我将标题和导航栏放入每个文件中。我想要一种方法将class="active"
添加到当前活动页面的规则集中(当前页面的相应<li>
将具有不同的样式)。
在每个页面中包含该文件意味着,在包含的文件中,所有项目都不能包含活动类。
有没有办法在几行代码中执行此操作? (使用jQuery / JS)
我的另一个选择是将URL的最后一部分与每个列表项中锚点href
的一部分相匹配。
解决方案:(由RomanGorbatko提供)
var tab = window.location.pathname.split("/");
tab = tab[tab.length - 1]; // This probably is not efficient - suggestions?
if (tab != "") $("#nav a#" + tab).addClass("active");
答案 0 :(得分:4)
首先检测页面名称
var index = document.location.href.lastIndexOf("/") + 1;
var page = document.location.href.substring(index,document.location.href.length);
然后找到具有相同名称的li并向其添加活动类 考虑到导航栏在ul。中有类导航栏。
$('ul.navbar li').each(function() {
$(this).removeClass('active');
if($.trim($(this).text()) == page) {
$(this).addClass('active');
}
});
这将满足您的要求。 注意:我假设li名称与页面名称相同
答案 1 :(得分:2)
例如。你讨厌一些页面:
你的菜单有下一个表格:
<ul>
<li class="index">index</li>
<li class="faq">faq</li>
<li class="forum">forum</li>
</ul>
现在您检查网页的网址。
var index = window.location.pathname.split('/')[1];
$('ul.li').removeClass('active');
$('li.' + index).addClass('active');
<强>利润!强>
答案 2 :(得分:1)
您可以先查看网址以检测网页名称,然后将网页名称与您在LI上定义的类匹配。
if(document.location.href.indexOf('index')>-1) {
$('li.index').addClass('active')
}
如果您愿意,也可以使用页面标题来代替网址。
另一个技巧是每页为BODY标签添加一个类,让CSS完成工作:
body.index li.index {
background-color:#FF0000
}
body.aboutus li.aboutus {
.... whatever
}
答案 3 :(得分:1)
这是一个jquery / javascript免费解决方案的链接
我相信这会有所帮助。