我有一个无序列表,我使用以下代码将类添加到我访问的当前链接。
$("li a").filter(function(){
return this.href == location.href.replace(/#.*/, ""); }).addClass("selected");
结果是:<li><a href="#" class="selected">Link1</a></li>
但我需要的解决方案是:<li class="selected"><a href="#">Link1</a></li>
请帮忙。谢谢。
更新:目前大多数答案都可以。但是,我遇到了另一个问题。
父母李有子菜单。单击子菜单链接后,选择&#34;选择&#34;父李的班级消失了。有没有办法让#34;被选中&#34;班级也留在父母李?或者,如果可以只在父li上添加类,而不是在任何单击的子菜单链接上添加类?再次感谢您的帮助。 :)
答案 0 :(得分:2)
您正在过滤锚元素,而不是li
,因此addClass()
会将类添加到a
元素。您可以使用祖先查找(.parent(),. closest())来查找所需的li
元素,然后使用addClass()
$("li a").filter(function () {
return this.href == location.href.replace(/#.*/, "");
}).parent().addClass("selected");
答案 1 :(得分:1)
我认为应该这样做
$("li a").filter(function(){
return this.href == location.href.replace(/#.*/, ""); }).parent('li').addClass("selected");
编辑
$("li a").filter(function(){ return this.href == location.href.replace(/#.*/, ""); }).parents('li, li:first').addClass("selected");
答案 2 :(得分:1)
$("li a").filter(function(){
return this.href == location.href.replace(/#.*/, ""); }).closest('li').addClass("selected");
答案 3 :(得分:0)
更清洁和优化的方式:
var targetUrl = window.location.href.replace(/#.*/, "");
var activeNav = $('li a[href="'+ targetUrl +'"]');
if ( activeNav.length ) {
activeNav.parent('li').addClass('selected');
}