我有一个包含3个级别的菜单,我想为第一个活动li使用一个类,为所有其他后续li使用第二个类。当我单击选择时,级别3保持活动整个路径(级别1,级别2,级别3)。如果我单击第2级上的选项以保持活动状态直至第2级。
我有以下内容:
$(document).ready(function(){
$('.sf-menu li a').each(function(index) {
if((this.pathname.trim() == window.location.pathname))
$(this).parent().addClass("selected");
var next_li = $(this).parent().next();
$('a', next_li).addClass("selected2");
});
});
答案 0 :(得分:0)
我想我这次得到它,它有点脏,但它有效。
首先添加类,以便识别第一,第二和第三级<li>
元素。在 foreach 或任何制作菜单的bucle中进行(或者如果没有这样的bucle则用手):
<ul id="navlist" >
<li id="home" class="firstLevel">
<a class="nav" href="home">Home</a>
<ul class="secondLevel">
<li class="secondLevel">
<a class="nav2" href="home">sub-Home1</a>
<ul>
<li class="thirdLevel"><a class="nav3" href="home">sub-sub-Home1></a></li>
<li class="thirdLevel"><a class="nav3" href="home">sub-sub-Home1></a></li>
</ul>
</li>
<li><a class="nav2" href="home">sub-Home2</a></li>
</ul>
</li>
<li id="about" class="firstLevel">
<a class="nav" href="about-us">About Us</a>
</li>
</ul>
然后使用jQuery closest
。它遍历DOM树并匹配最近的项,您可以传递一个选择器(我们刚创建的firstLevel或secondLevel类):
$('#navlist a').on('click', function (e) {
e.preventDefault(); //prevent the link from being followed
$('#navlist a').removeClass('selected');
$('#navlist a').removeClass('selected2');
$(this).closest('.secondLevel').children('a').addClass('selected2');
$(this).closest('.firstLevel').children('a').addClass('selected2');
$(this).addClass('selected');
});
然后您将!important
添加到选定的类(因此,如果在“关于我们”链接选择中进行了类比,则应用此类)。这是最脏的部分。
检查工作小提琴:https://jsfiddle.net/4r5vg/661/