Javascript jQuery下拉切换查找活动li并保持下拉列表打开
我在使用自定义下拉开关时遇到了一些问题 菜单在HTML中看起来是这样的,我没有编辑代码的选项,所以我必须用css/jQuery解决它:Javascript jQuery下拉切换查找活动li并保持下拉列表打开,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我在使用自定义下拉开关时遇到了一些问题 菜单在HTML中看起来是这样的,我没有编辑代码的选项,所以我必须用css/jQuery解决它: <ul> <li><a href="">Link"</a></li> <-- when this is active it has class="active" <li><a href="">Link"</a></li>
<ul>
<li><a href="">Link"</a></li> <-- when this is active it has class="active"
<li><a href="">Link"</a></li>
<li><a href="">Link"</a></li>
<li class=""> <-- this is always empty
<span>Title</span>
<ul>
<li class="active"><a href="">Link</a></li> <-- this is currently active
<li><a href="">Link</a></li>
<li><a href="">Link</a></li>
</ul>
</li>
</ul>
第一个实际运行良好的函数检查是否有带有class=”“
的li
,因为这表明它有一个子菜单。单击li
中的span
可切换类菜单打开
,从而导致菜单打开或折叠
现在,当我在子菜单中的页面上时,我想保持菜单打开。如果在这种情况下,子ul
中的li
处于活动状态,则父li
不处于活动状态
不幸的是,这不起作用。我也尝试过不同的方法,比如hascalass
,children
,但都不起作用。我指出这个问题主要是为了:
$(this).addClass("menu-open");
因为似乎从未找到$(此)
。例如,如果我将$(this)更改为$('body'),并添加一个hide(),我清楚地看到它是有效的,因为我得到一个空白页:)
任何关于这个问题的建议都将不胜感激,因为我现在几乎放弃了
$(函数(){
$('.menu li[class=”“]span')。单击(函数(){
const self=$(this.parent();
self.toggleClass(“菜单打开”);
});
if($('.menu li[class=”“]).find('li.active').length!==0){
$(此).addClass(“菜单打开”);
}
});代码>
.menu{width:200px}
ul{列表样式类型:无}
li{背景:#ccc;边距:2px}
span{显示:块}
.menu li[class=”“]{
高度:20px;
溢出:隐藏;
光标:指针;
}
.菜单打开{
高度:自动;
溢出:可见;
光标:指针;
}
-
标题
-
-
-
标题
尝试使用JQuery提供的每个
操作符
是这样的:
$('.menu li').each(function() {
if($(this).find('li.active').length !== 0) {
$(this).addClass('menu-open');
}
});
在您的情况下,使用此
表达式的上下文并不表示您在if
中尝试使用的选择器
在使用
each
的示例中,函数中的this
表达式表示由选择器表示的正在交互的元素。请包含一个可运行的代码。我在问题中添加了一个示例代码:)我注意到在编辑它之前,我也必须更改$(this).addClass('active')。您的解决方案非常有效-非常感谢:)(感谢您解释原因!)
$('.menu li').each(function() {
if($(this).find('li.active').length !== 0) {
$(this).addClass('menu-open');
}
});