jQuery多级菜单首次点击展开子菜单 二次点击检测href跳转或关闭
你只需要替换原代码中的点击事件逻辑即可实现需求,修改后的完整代码如下:
$('nav .menu li.menu-item-has-children').each(function(){ if($(this).hasClass('current_page_item')) { $(this).addClass('clicked'); } }); $('.menu li.menu-item-has-children').click(function(e) { const $currentItem = $(this); // 首次点击:未展开状态 if (!$currentItem.hasClass('clicked')) { $currentItem.addClass('clicked'); e.preventDefault(); return false; } // 二次点击:已展开状态 else { const $link = $currentItem.children('a'); // 判断是否存在有效href属性 const hasValidHref = typeof $link.attr('href') !== undefined && $link.attr('href').trim() !== ''; // 无有效href则关闭子菜单 if (!hasValidHref) { $currentItem.removeClass('clicked'); e.preventDefault(); return false; } // 有有效href则不拦截,直接走默认跳转逻辑 } }); if ($('li.menu-item-has-children.clicked .sub-menu > li.menu-item-has-children.current-menu-ancestor.current-menu-parent').length) { $('li.menu-item-has-children.clicked .sub-menu > li.menu-item-has-children.current-menu-ancestor.current-menu-parent').addClass('clicked'); } if ($('li.menu-item-has-children.current-menu-ancestor').length) { $('li.menu-item-has-children.current-menu-ancestor').addClass('clicked'); }
修改后逻辑完全匹配需求:
- 带有效href属性的菜单项:首次点击展开子菜单,第二次点击直接跳转到对应URL
- 无有效href属性的菜单项:首次点击展开子菜单,第二次点击收起子菜单,支持循环切换展开/收起状态
原有CSS、HTML代码无需做任何调整即可正常运行。
内容的提问来源于stack exchange,提问作者DieAndere
相关产品推荐
相关产品推荐

