应使用element.on('nav(sideMenu)', callback)在菜单点击时立即设置document.title,避免被tab渲染、iframe加载或页面跳转覆盖;需配合lay-id映射表防重复错乱,并监听hashchange/popstate同步历史状态。
直接改 document.title 就行,但必须确保在菜单点击事件触发后、页面跳转或 tab 切换前执行,否则会被后续逻辑覆盖。
为什么改了 title 又变回去了?
常见错误是把 document.title = '新标题' 写在 element.tabAdd() 之后,而没意识到 tab 渲染或 iframe 加载会触发页面重绘,悄悄把 title 刷回原始值;或者用 window.location.href 跳转时没带新 title,浏览器按历史记录还原。
- 菜单点击后立即执行
document.title,别等 tab 渲染完成再改 - 如果 tab 内容是 iframe,iframe 加载完成后可能自行设置
document.title,需监听其load事件二次覆盖 - 避免在
element.on('tab(filter)')回调里改 title —— 这个事件只在用户手动切换 tab 时触发,不响应菜单点击
怎么绑定到左侧菜单点击事件?
必须用 element.on('nav(sideMenu)', callback),其中 sideMenu 是你侧边栏容器的 lay-filter 值。这是 Layui 唯一能稳定捕获所有菜单项(含一级、二级、展开后点击)的钩子。
- 不要用原生
click绑定到.layui-nav-item a—— 二级菜单展开时点击父项不会触发 - 回调函数里的
elem参数是当前点击的 DOM 元素,可用elem.innerText.trim()或elem.getAttribute('lay-id')提取标题 - 若菜单项有图标或 badge,
innerText会包含多余空格或符号,建议提前清洗:elem.querySelector('span')?.innerText?.trim() || elem.innerText.trim()
如何避免重复设置或状态错乱?
Layui 不维护菜单项与 title 的映射关系,得自己存一份对照表。尤其当多个菜单项对应同一 tab 时,title 容易被最后点击的项覆盖错乱。
- 初始化时建立
menuTitleMap = { 'user-list': '用户管理', 'order-log': '订单日志' }这样的对象 - 点击时先查
elem.getAttribute('lay-id'),再从 map 中取值:document.title = menuTitleMap[id] || elem.innerText.trim() - 如果菜单没设
lay-id,就用elem.dataset.title或自定义属性兜底,别依赖 DOM 文本直取 - 注意 SPA 场景下浏览器前进/后退会恢复历史 title,可监听
popstate事件做同步
最易忽略的是:菜单点击后若触发了 location.hash 变更或 history.pushState,浏览器会按 URL 规则重置 title —— 此时得在 hashchange 或 pushState 后再次赋值,不能只靠一次点击事件。


















