【发布时间】:2018-11-15 17:27:19
【问题描述】:
我为一个简单的菜单开发了以下代码:
$(document).ready(function () {
$(".main_menu_01, .main_menu_02").on('click', function () {
var $panel = $(this).next('.panel');
if ($panel.is(':visible')) {
$panel.add($panel.find('.panel')).slideUp(500).removeClass('active');
} else {
$panel.slideDown(500).addClass('active');
}
});
});
.panel{
width: 100%;
padding-left: 0%;
font-weight: bold;
overflow: hidden;
display:none;
}
.main_menu_01 {
padding-left: 1%;
background: blue;
}
.main_menu_02 {
padding-left: 5%;
background: lime;
}
.sub_menu_01{
padding-left: 1%;
background: lime;
}
.sub_menu_02{
padding-left: 10%;
background: lime;
}
.main_menu_01:before, .main_menu_02:before {
content:'+';
width:20px;
display:inline-block;
}
.main_menu_01.active:before, .main_menu_02.active:before {
content:'-';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<li class="main_menu_01"> 1.0 Main Menu </li>
<ul class="panel">
<li class="sub_menu_01"> 1.1 Sub Menu </li>
<li class="main_menu_02"> 1.2 Sub Menu </li>
<ul class="panel">
<li class="sub_menu_02"> <a> 1.2.1 Sub Menu </a> </li>
<li class="sub_menu_02"> <a> 1.2.2 Sub Menu </a> </li>
</ul>
</ul>
到目前为止,这一切都很好。您也可以在 JSFiddle here 中找到代码。
如您所见,我想在 main_menu 按钮上添加 + 和 - 符号,具体取决于菜单是否打开。因此,我尝试使用CSS 中的before 代码。然而,目前+ 符号仍然存在,尽管菜单已打开。
我不确定这个问题是否是由jQuery 代码引起的。但是,我需要这个 jQuery 代码来关闭/打开整个菜单,以防点击按钮 main_menue_01。
您知道我需要在我的代码中更改什么,以便我可以使用jQuery 代码和+/- 符号提供的完整功能吗?
【问题讨论】:
-
如果您在浏览器的检查器中查看不断变化的类属性,您会注意到接收
active类(<ul>)的元素与您拥有的元素不同将您的+/-附加到 (<li>)。 -
为活动/非活动创建单独的类,以处理 +/- 并在您的 if 中添加/删除这些类。