我有一个嵌套列表,如下所示:
<ul class="menu-wrapper">
<li>
<a href="#">Menu item</a>
<ul class="sub-menu">
<li>
<a href="#">Subitem-1</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
<li>
<a href="#">Subitem-2</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
</ul>
</li>
</ul>当悬停ul.menu-wrapper > li项时,.active类将应用于子菜单列表中的第一个ul.sub-menu和第一个li项:
$('ul.menu-wrapper').children().hover(
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.addClass('active')
subMenu.children().first().addClass('active')
},
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.removeClass('active')
}
)现在,我需要将li项悬停在ul.sub-menu中,并将.active类更改为正在悬停的项。
我可以通过在.hover()项上添加一个subMenu.children()方法来做到这一点。
$('ul.menu-wrapper').children().hover(
function() {
...
subMenu.children().hover(
function() {
$(this).addClass('active')
},
function() {
$(this).removeClass('active')
}
)
},
function() {
...
}
)当子菜单项被悬停并且指针返回到ul.menu-wrapper > li项时,我希望至少有一个带有.active类的ul.sub-menu > li项。
当前,当指针从子菜单移回父列表项时,mouseleave方法将移除该类。如何防止在任何时候都有一个带有ul.sub-menu > li类的.active?
发布于 2022-11-02 12:41:06
在鼠标外,如果没有li项有活动类,则向第一个li添加活动类。
$('ul.menu-wrapper').children().hover(
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.addClass('active')
subMenu.children().first().addClass('active')
subMenu.children().hover(
function() {
$(this).addClass('active').siblings().removeClass('active')
},
function() {
$(this).removeClass('active')
if($('.sub-menu > li.active').length == 0) {
subMenu.children().first().addClass('active')
}
}
)
},
function() {
let subMenu = $(this).find('ul.sub-menu').first()
subMenu.removeClass('active')
}
)body {
margin: 0;
padding: 0;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
ul.menu-wrapper {
height: 80px;
}
ul.menu-wrapper {
background: gray;
}
ul.menu-wrapper>li {
height: 100%;
display: flex;
align-items: center;
}
ul.menu-wrapper ul.sub-menu {
visibility: hidden;
position: absolute;
top: 80px;
}
ul.menu-wrapper ul.sub-menu.active {
visibility: visible;
}
ul.menu-wrapper ul.sub-menu.active>li.active {
background: darkmagenta;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav role="navigation" id="navigation-wrapper">
<ul class="menu-wrapper">
<li>
<a href="#">Menu item</a>
<ul class="sub-menu">
<li>
<a href="#">Subitem-1</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
<li>
<a href="#">Subitem-2</a>
<ul>
<li>Sub-Subitem-1</li>
<li>Sub-Subitem-2</li>
<li>Sub-Subitem-3</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
https://stackoverflow.com/questions/74289090
复制相似问题