我有一个基于bootstrap的< UL>导航树每个< LI>在当前页面的路径中给出“活动”类。因此,如果我在主页下面的两个页面上,代码将大致如下:
<ul>
<li>Link1</li>
<li>Link2</li>
<li class='active'>Link3
<ul>
<li>sublink1</li>
<li class=active>sublink2
<ul>
<li>subsublink1</li>
<li class=active>subsublink2 THIS IS MY PAGE</li>
</ul>
</li>
</ul>
</li>
问题是bootstrap为所有li.active元素添加了边框。我只希望边框适用于最深的边框,即我实际上的页面。
我不会搞乱引导基础,所以我不打算从整个路径中删除活动类。
我的目标是让jQuery删除不需要的边框。我想找到任何没有li.active儿童的li.active,这表明它是路径中最深的li.active。然后用li.active找到它的所有父母,并从中删除边框。
我如何构建那个JQUERY?
我在想这样的事情(知道notHasClass不存在):
$('li.active').children().notHasClass('active').parents.hasClass('active').css('border','none');
答案 0 :(得分:4)
查找包含其他li.active
元素的所有.active
元素并删除边框:
$('li.active:has(.active)').css({ border : 'none' });
答案 1 :(得分:1)
此:
$("li.active").each(function(){
if($(this).find("li.active").length>0){
$(this).css("border","none");
}
})
JSFiddle:http://jsfiddle.net/DDUNE/
或者我不明白你的权利?
答案 2 :(得分:0)
使用:last你得到DOM中的最后一个元素。因此,您可以通过li.active获取父母并删除边框。
$('li.active:last').parents('li.active').css('border', 'none');
查看示例: http://jsfiddle.net/kmgUh/
或者你可以用removeClass('active')替换.css('border','none')。
祝你好运
答案 3 :(得分:0)
我假设li
只有ul
作为其子级,并且li
只有.active
类,并且对于这些假设,这有效:
$('li.active').filter( function () {
if ( $(this).children('ul').length === 0 )
return true;
return false;
}).parents('li').removeClass('active');
答案 4 :(得分:0)
找到了一种稍微不同的方法来实现它:
$('li.active').has('ul').addClass('hasSubmenu');
显然,如果我的李含有ul,它就不能是最深的li.active。
所以现在我可以使用纯css来摆脱边界:
li.active.hasSubmenu {border:none}