我的主要导航是一个树状菜单。
目前,用户必须手动展开和折叠树的每个部分,这是通过在jQuery中在折叠时添加has-sub
类和在展开时添加menu-expanded
类来实现的。
然而,我所希望的行为是,当单击菜单项时,强制除当前展开项之外的所有项自动折叠。 我能想到两种方法,但我不确定如何应用。
菜单扩展
,然后使用菜单扩展
类搜索所有其他菜单项,并将其设置为has-sub
。 我不知道如何按类属性搜索。 has-Sub
。我的代码目前如下,这是第一个子菜单项和我有相应的代码为第二和第三也(我得到周围把它在一个循环!)。
//First Child List Items
$('#cssmenu > ul > li > ul > li:has(ul)').addClass("has-sub");
$('#cssmenu > ul > li > ul > li > a').click(function() {
sessionStorage.removeItem('secondChildMenu');
var parentEl = $(this).parent().parent().parent();
console.log(parentEl);
var parentEl = parentEl.children('a').attr('id');
console.log(parentEl);
saveParent(parentEl);
let firstChildElement = $(this).attr('id');
var checkElement = $(this).next();
saveFirstChild(firstChildElement);
$(this).closest('ul > li').addClass('active'); //Add active class
//Element sub-menu and visible
if ((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp(100);
checkElement.closest('li').addClass("has-sub");
checkElement.closest('li').removeClass("menu-expanded");
}
//Submenu present and not visible
if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
checkElement.slideDown(100); //Expand sub-menu
checkElement.closest('li').removeClass("has-sub");
checkElement.closest('li').addClass("menu-expanded");
}
if (checkElement.is('ul')) {
return false;
} else {
return true;
}
});
下面菜单的可视化(如果有用的话)。
一种方法可以是找到所有打开的菜单,并在打开要打开的菜单之前关闭它们。
这可以通过以下方式完成。
//找到所有展开的菜单,向上滑动,删除展开的类并添加子类。
$('li.menu-expanded').SlideUp(100).RemoveClass('menu-expanded').AddClass('has-Sub');