2014-09-29 39 views
2

我有一个无序的列表,我正在使用下面的代码将类添加到我访问的当前链接。如何在里面添加类?

$("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>

请帮助。谢谢。

更新:大多数当前的答案正常工作。但是,我遇到了另一个问题。

父李有子菜单。点击子菜单链接后,父li的“selected”类就消失了。有没有办法让“选定”班继续留在家长李?或者,如果可以仅在父li上添加该类,而不是在任何点击的子菜单链接上添加该类?再次感谢您的帮助。 :)

回答

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"); 
+0

感谢爵士,这一个作品以及:) – user3892090 2014-09-29 06:58:53

+0

欢迎您高兴地帮助 – 2014-09-29 07:33:33

+0

嗨,先生,我发布了一个更新问题。希望你能帮助我再次:) – user3892090 2014-09-29 07:56:37

2

要筛选的锚元素,而不是li所以addClass()将类添加到a元素。您可以使用祖先查询(.parent(),.closest())来找到所需li元素,然后用addClass()

$("li a").filter(function() { 
    return this.href == location.href.replace(/#.*/, ""); 
}).parent().addClass("selected"); 
+1

你不能说它是“a”的直接父母,直到你不知道HTML结构 – 2014-09-29 06:52:37

+0

@TusharRaj Op已经给出了html结构 – 2014-09-29 06:53:49

+0

是啊..upvoted! – 2014-09-29 06:54:53

0

清洁和最优化的方式:

var targetUrl = window.location.href.replace(/#.*/, ""); 
var activeNav = $('li a[href="'+ targetUrl +'"]'); 
if (activeNav.length) { 
    activeNav.parent('li').addClass('selected'); 
} 
+0

感谢您的回复先生,但没有达到我想要的结果。 – user3892090 2014-09-29 07:05:00

1
$("li a").filter(function(){ 
     return this.href == location.href.replace(/#.*/, ""); }).closest('li').addClass("selected"); 
+0

感谢Sir的回复。有用 :) – user3892090 2014-09-29 07:03:16