提问人:rabox66 提问时间:2/1/2019 更新时间:2/3/2019 访问量:777
单击时打开和关闭子菜单的不同级别
open and close different levels of a submenu on click
问:
我有一个无法更改的预制菜单。菜单由三个级别的嵌套列表组成。我只想打开单击父元素的部分。
这是我的HTML:
<ul>
<li>Coffee</li>
<li>Tea
<ul class="sub-menu">
<li>Black tea</li>
<li>Green tea
<ul class="sub-menu">
<li>From India</li>
<li>From Philippines</li>
</ul>
</li>
</ul>
</li>
<li>Milk</li>
</ul>
在开始时,将显示整个列表,因此我添加了一些代码(jquery 和 CSS)来定位不同的子菜单并关闭它们。
$(".sub-menu").not(".sub-menu > li > .sub-menu").addClass("closed first_level");
$(".sub-menu > li > .sub-menu").addClass("closed second_level");
.closed {display: none !important;}
.opened {display: block !important;}
现在是开盘和闭幕:
$( ".first_level" ).parent("li").click(function() {
$(".first_level").toggleClass("closed opened");
$(".first_level").slideToggle("slow");
});
$( ".second_level" ).parent("li").click(function() {
$(".second_level").toggleClass("closed opened");
$(".second_level").slideToggle("slow");
});
我的解决方案只起作用了一半,有很多我不想要的效果。子菜单上下滑动,因为它们打开和其他丑陋的东西。
我知道我的jQuery一团糟,但我仍在学习。那么有人可以帮我吗?
另一个问题:这个问题一定很常见。哪个短语是搜索引擎寻找解决方案的正确短语?我找不到任何对我有帮助的东西。
谢谢!
答:
如果你这样做,你会节省很多代码:D
对于第一个代码,需要找到元素是否被隐藏,并选择要显示或隐藏的函数。1 步后,我们停止执行函数。
你为什么使用?停止代码执行而没有该脚本将不仅隐藏/显示子元素,还会发生视觉错误。return false
我希望我能帮助xD
任何时候你都可以改变动画xD,我只需放简单的幻灯片xD
$("li").on('click',function(){
if($(this).find("ul:first").is(":hidden")){
$(this).find("ul:first").slideDown();
return false;
}
else{
$(this).find("ul:first").slideUp();
return false;
}
});
li ul{
display:none}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>Coffee</li>
<li>Tea
<ul class="sub-menu">
<li>Black tea</li>
<li>Green tea
<ul class="sub-menu">
<li>From India</li>
<li>From Philippines</li>
</ul>
</li>
</ul>
</li>
<li>Milk</li>
</ul>
一些额外的:
摆弄附加箭头(:D) xD https://jsfiddle.net/5pxwy0od/
我使用兄弟姐妹,并且 body click becouse arrows(elements) 是在 html(node list) 准备好后创建的,因此元素对 jquery 不可见,每次我们在 DOM 渲染后添加一些 element(element node) 时,我们都必须使用 body 作为选择器。 诸如此类:
$("body").on('click','.nav_arrow',function(){
// function goes here
});
评论
我还添加了箭头来指示打开/关闭的状态。我的整个代码都存储在那个小提琴中,如果其他人想使用它,这里只是jQuery:
$("body").on('click','.nav_arrow',function(){
/* alert($(this).closest('ul').html()); */
if($(this).siblings(".sub-menu").is(":hidden"))
{ $(this).siblings(".sub-menu").slideDown();
$(this).addClass("turn"); return false;
}
else{ $(this).siblings(".sub-menu").slideUp();
$(this).removeClass("turn"); return false; }
});
https://jsfiddle.net/rabox66/duty8pcq/28/
希望没关系,反正它有效。;)
评论