当用户选择一个手风琴菜单以打开一个菜单并关闭其他菜单时,我正在寻找创建该功能的方法。
目前,我具有在用户选择当前打开的菜单的顶层时删除类的功能。
但是我一直在尝试添加所有其他功能。我意识到这已经被问过了,我已经尝试实施其他非常好的建议,以获得我需要的重新使用。但是,我正在努力使它们与我的结构匹配。另外,我的jQuery知识目前很薄弱。
有人有什么建议吗?我现在正在转圈。
我具有以下结构。我对此没有真正的控制权,因为它是我继承并尝试使用拔钉器功能的WP,预先构建的模板项目-(为简化起见,简化了结构)
$(document).ready(function() {
$('.sidebar .menu-item-has-children').click(function(e) {
$(this).toggleClass('sub-menu-open');
});
$('.sidebar .menu-item-has-children ul li a').click(function(e) {
e.stopPropagation();
});
if ($('ul.sub-menu').find('li.current-menu-item').length !== 0) {
$('li.current-menu-item').closest('.sidebar .menu-item-has-children').addClass('sub-menu-open');
}
});
.sub-menu {
display: none;
}
.sub-menu-open .sub-menu {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<aside id"sidebar" class="sidebar fusion-widget-area fusion-content-widget-area fusion-sidebar-left fusion-employanapprentice-accordionmenu fusion-sticky-sidebar">
<div class="widget widget_nav_menu">
<div class="menu-employ-an-apprentice-accordion-container">
<ul id="menu-employ-an-apprentice-accordion">
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 1 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 2 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 3 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 4 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 5 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
答案 0 :(得分:2)
只需添加/删除类即可:
$(document).ready(function() {
var allSubmenus = $('.sidebar .menu-item-has-children');
allSubmenus.click(function(e) {
var thisSubmenu = $(this);
if (thisSubmenu.hasClass('sub-menu-open')) {
thisSubmenu.removeClass('sub-menu-open');
} else {
allSubmenus.removeClass('sub-menu-open');
thisSubmenu.addClass('sub-menu-open');
};
});
});
.sub-menu {
display: none;
}
.sub-menu-open .sub-menu {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<aside id "sidebar" class="sidebar fusion-widget-area fusion-content-widget-area fusion-sidebar-left fusion-employanapprentice-accordionmenu fusion-sticky-sidebar">
<div class="widget widget_nav_menu">
<div class="menu-employ-an-apprentice-accordion-container">
<ul id="menu-employ-an-apprentice-accordion">
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 1 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 2 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 3 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 4 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 5 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
答案 1 :(得分:1)
要在打开另一个菜单时关闭其他菜单,可以使用.sub-menu-open
类选择所有打开的实例,然后从它们中删除该类:
$(document).ready(function() {
$('.sidebar .menu-item-has-children').click(function(e) {
$('.sub-menu-open').not(this).removeClass('sub-menu-open'); // add this line
$(this).toggleClass('sub-menu-open');
});
$('.sidebar .menu-item-has-children ul li a').click(function(e) {
e.stopPropagation();
});
if ($('ul.sub-menu').find('li.current-menu-item').length !== 0) {
$('li.current-menu-item').closest('.sidebar .menu-item-has-children').addClass('sub-menu-open');
}
});
.sub-menu {
display: none;
}
.sub-menu-open .sub-menu {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<aside id"sidebar" class="sidebar fusion-widget-area fusion-content-widget-area fusion-sidebar-left fusion-employanapprentice-accordionmenu fusion-sticky-sidebar">
<div class="widget widget_nav_menu">
<div class="menu-employ-an-apprentice-accordion-container">
<ul id="menu-employ-an-apprentice-accordion">
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 1 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 2 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 3 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page">
<a href="#">Link 4 - No sub menu</a>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children">
<a href="#">Link 5 - Has Sub menu</a>
<ul class="sub-menu">
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
<li>
<a href="#">Links</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
答案 2 :(得分:1)
只需替换您的jquery代码
$('.sidebar .menu-item-has-children').click(function(e) {
$('.sidebar .menu-item-has-children').removeClass('sub-menu-open')
$(this).addClass('sub-menu-open');
});
您可以查看here