如何在里面添加课程?

时间:2014-09-29 06:47:36

标签: jquery

我有一个无序列表,我使用以下代码将类添加到我访问的当前链接。

$("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上添加类,而不是在任何单击的子菜单链接上添加类?再次感谢您的帮助。 :)

4 个答案:

答案 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');
}