Jquery 从accordion中的第一个父级移除活动类

Jquery 从accordion中的第一个父级移除活动类,jquery,class,accordion,parent,Jquery,Class,Accordion,Parent,我有以下问题。当我单击任何li元素时,它会添加类活动,但当我单击li元素以展开二级菜单时,它会添加类活动,这是正确的,但当我单击例如二级链接时,它会添加类活动,但内部带有ul的父li仍有类活动如何删除此类 <ul class="nav-stacked"> <li><a href="#">Link</a> <li><a href="#">Link 1</a> <li><a href="#">

我有以下问题。当我单击任何li元素时,它会添加类活动,但当我单击li元素以展开二级菜单时,它会添加类活动,这是正确的,但当我单击例如二级链接时,它会添加类活动,但内部带有ul的父li仍有类活动如何删除此类

<ul class="nav-stacked">
<li><a href="#">Link</a>
<li><a href="#">Link 1</a>
<li><a href="#">Link 2</a>
<ul class="dropdown">
<li><a href="#">Second Level Link</a></li>
</ul>
</li>
<li><a href="#">Link 3</a></li>
</ul>

为什么不尝试删除所有活动类,然后再次添加活动类

$(".nav-stacked > li").click(function() {
    $(".active").removeClass("active");
    $(this).addClass("active");
    });

我自己整天都在研究这个问题。我正在尝试为选项卡式空间制作一个侧菜单

我尝试在单击任何节点时获取根节点,然后从所有拥有它的节点中删除“active”类。最后,我将“活动类”添加到当前节点

$(“.nav>li”)。单击(函数(){
var firstUL=document.getElementById(“侧栏”);//获取根节点
var listItem=firstUL.getElementsByTagName(“li”);//获取所有子li
//通过childen循环并从所有拥有它的人中删除active。
对于(变量i=0;i
这确实会从所有元素中删除“active”,但在添加时失败,因为“this”似乎始终是父节点,而不是单击的节点

在旁注中,我找到了一个适合我的解决方案,我想我会分享它,因为它太简单了,我一开始也没有想到它

不要使用嵌套的ul元素或js。制作一个ul,用li填充,并将“subitem”类添加到所有被认为是子元素的元素中。最后编写一些缩进子项的css

如果这不是您想要的外观/功能,请忽略。

不清楚你在问什么。。。我在这里没有看到向
ul
添加类的代码,从这里我看到您的事件行为是预期的。。。你能用JSFIDLE重现这个问题吗?你应该在代码中添加一些解释。首先你应该从所有元素中删除“active”类,然后将该类添加到所需的元素中。这可能对你有帮助。
$(".nav-stacked > li").click(function() {
    $(".active").removeClass("active");
    $(this).addClass("active");
    });
 try this:
 $(".nav-stacked > li").click(function() {
   $(".active").each(function(){
     $(this).removeClass("active");
   });
    $(this).addClass("active");
});
$(".nav-stacked > li").click(function() {

    var firstUL = document.getElementById("sidebar"); //get root node
    var listItem = firstUL.getElementsByTagName("li"); //get all child li

    //loop through childen and remove  active from all that have it.
    for (var i=0; i < listItem.length; i++) {
        console.log(listItem[i].id);

        if(listItem[i].className == "active"){
        $(listItem[i].id).removeClass("active");
        }
        else
        console.log(listItem[i].id + ' does not have active class');
    }

    $(this).addClass("active");

});