html - 无法展开二级菜单
问题描述
我是一个 jquery 菜鸟,我不知道如何在可点击的手风琴式菜单中获得下一个级别的扩展。
这是小提琴:
https://jsfiddle.net/hinterseer/gaxm6uqo/29/
html
<div class="navbar-collapse">
<ul class="nav">
<li class="subMenu">Archive <span class="caret toggle">+</span>
<ul class="subMenu-link">
<li>Test 1</li>
<li>Test 2</li>
</ul>
</li>
<li class="subMenu"> Archive 2 <span class="caret toggle">+</span>
<ul class="subMenu-link">
<li class="subMenu">Archive 3 <span class="caret toggle">+</span>
<ul class="subMenu-link">
<li>Test 3</li>
<li>Test 4</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
css
.subMenu-link {
display: none;
}
.subMenu {
list-style: none;
}
杰瑞
(function($) {
$("li.subMenu").unbind().click(function () {
var slideDown = $(this).find(".toggle").text() == "+" ? false : true;
$(".subMenu-link").slideUp();
$(".toggle").text('+');
if (!slideDown) {
$(this).find('.subMenu-link').slideDown();
$(this).find('.toggle').text('-');
}
});
})(jQuery);
解决方案
我进一步重构了一些东西,以便能够独立地切换每个列表项及其子项。我列出了以下更改:
- 将侦听器更改为
$(".toggle").on('click', function() {...
- 更改
slideDown
和const
修改选择器$(this).find(".caret:first")...
- 用于
.siblings()
向上/向下滑动功能,$(this).siblings(".subMenu-link").slideUp()
- 重组 HTML 以将
li
文本包裹在自己span
的文本中,以便文本触发切换而不是整个元素(及其子元素) - 添加
cursor: pointer
到.toggle
用户指示点击的视觉提示
看到这个,我想我会试一试,即使它被问得更多。
(function($) {
$(".toggle").on('click', function() {
const slideDown = $(this).find(".caret:first").text() == "+" ? false : true;
$(this).siblings(".subMenu-link").slideUp();
$(this).find(".caret").text('+');
if (!slideDown) {
$(this).siblings('.subMenu-link').slideDown();
$(this).find('.caret').text('-');
}
});
})(jQuery);
.subMenu-link {
display: none;
}
.subMenu {
list-style: none;
}
.toggle {
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="navbar-collapse">
<ul class="nav">
<li class="subMenu"><span class="toggle">Archive <span class="caret">+</span></span>
<ul class="subMenu-link">
<li>Test 1</li>
<li>Test 2</li>
</ul>
</li>
<li class="subMenu"><span class="toggle">Archive 2 <span class="caret">+</span></span>
<ul class="subMenu-link">
<li class="subMenu"><span class="toggle">Archive 3 <span class="caret">+</span></span>
<ul class="subMenu-link">
<li>Test 3</li>
<li>Test 4</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
推荐阅读
- php - 根据设置的模板名称获取 PHP 文件的内容
- python - PIL图像到numpy数组的Python转换非常慢
- python - Python:使用 .item() 打印字典时出错
- laravel - 获取queryScope结果槽whereHas使用haversine公式计算距离的方法
- sql - 匹配具有不同字符长度的 2 个字段,substr?填充?
- php - 如何在同一日期下显示多个帖子而不在循环中重复同一日期(php)
- api - GraphQL 字段解析器需要上下文信息
- php - 如何修复数组到字符串转换 Bootstrap PHP?
- c# - 回调与对象引用
- r - 在小图像 dataset.in r by keras 上训练 VGG16 时出错