
Layui 的 element 模块本身不维护导航菜单的运行时状态(比如展开/折叠、高亮选中等),所有状态都靠 DOM class(如 layui-this、layui-nav-itemed)和结构控制。所谓“重置到初始状态”,本质是手动清除这些动态 class,并还原为渲染时的原始结构。
清空所有选中和展开状态
导航菜单的“初始状态”通常指:无任何 layui-this,所有二级菜单(.layui-nav-child)默认收起(即不带 layui-nav-show class)。你需要主动移除这些 class:
- 移除所有
.layui-this:$('.layui-nav-item').removeClass('layui-this'); - 收起所有已展开的二级菜单:
$('.layui-nav-child').removeClass('layui-nav-show'); - 如果一级菜单有手动添加的
layui-nav-itemed(表示其子菜单已展开),也一并清除:$('.layui-nav-item').removeClass('layui-nav-itemed');
注意 element.render() 会覆盖你的操作
如果你在调用 element.render('nav') 或 element.render() 之后再执行上面的清除操作,没问题;但若反过来——先清除 class,再调用 render() ——那清除会被立即覆盖。因为 render 会重新解析 HTML 结构,按当前 DOM 状态(比如是否有 layui-nav-show)决定是否加 class。
所以正确顺序是:
- 确保菜单 HTML 是初始结构(不含
layui-this、layui-nav-show等) - 调用
element.render('nav', 'yourFilter')完成初始化 - 需要重置时,只执行上面的 class 清除,不再调用
render
处理动态菜单或接口加载场景
如果菜单是通过 JS 拼接字符串或 Ajax 加载后插入的,记得:先插入完整 HTML(不含任何运行时 class),再调用 element.render('nav');之后再做状态重置,就只需清除 class,无需重复 render。
避免在 element.on('nav') 回调里调用 render(),否则可能触发无限重绘。
补充:恢复默认高亮(如首页)
如果希望重置后自动高亮某个菜单项(比如首页或第一个有效项),可在清除 class 后手动加上:
$('.layui-nav-item').first().addClass('layui-this');- 如果该菜单有二级菜单且需默认展开,再加:
.find('.layui-nav-child').addClass('layui-nav-show').end().addClass('layui-nav-itemed');
这一步不是“重置”,而是重置后的可选行为,按业务需要决定是否执行。











