Jquery 从accordion中的第一个父级移除活动类
我有以下问题。当我单击任何li元素时,它会添加类活动,但当我单击li元素以展开二级菜单时,它会添加类活动,这是正确的,但当我单击例如二级链接时,它会添加类活动,但内部带有ul的父li仍有类活动如何删除此类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="#">
<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");
});