用 localstorage 记住列显隐状态需用稳定语义化 key(如 user_name),绑定 data-column 属性,存取时 json 序列化并 try-catch,还原时精准控制 dom 渲染而非仅样式隐藏,监听 storage 事件同步多标签页,并防抖写入。

用 localStorage 记住用户在面板中选择显示哪些列,核心是把“列开关状态”转成字符串存起来,页面加载时读取并还原 UI,操作简单但细节决定成败。
给每列定义唯一、稳定的标识符
不能用序号、中文名或动态生成的 ID 做键名。推荐使用语义化小写英文 key,比如 user_name、last_login、status_badge。确保同一列在不同会话中 key 不变,否则存储失效。
- 在列控制面板(如设置弹窗或侧边栏)中,每个开关按钮或复选框要绑定对应列 key,例如:
<input type="checkbox" data-column="user_name"> - 避免用 innerText 或 label 文字作为判断依据——翻译、换行或空格都会导致匹配失败
保存与读取列显隐状态
用户勾选/取消某列时,立即更新一个对象,再整体序列化存入 localStorage;加载时反向解析,批量同步 DOM 状态。
- 存的时候统一用 JSON 字符串:
localStorage.setItem('panel-visible-columns', JSON.stringify({ user_name: true, last_login: false, status_badge: true })) - 读的时候加 try-catch 防止解析失败:
try { const cols = JSON.parse(localStorage.getItem('panel-visible-columns') || '{}'); } catch(e) { const cols = {}; } - 没存过时,按默认配置兜底(比如全显示),不强制清空已有列
还原时精准控制表格或列表结构
不是简单 show/hide 元素,而是根据状态决定是否渲染、是否插入 DOM,避免布局错位或空白占位。
- 如果是表格(table),优先对
<th> 和对应 <code><td> 同时控制显隐,用 <code>style.display = 'none'或添加 class 触发 CSS 规则 - 如果是卡片流或 flex 列表,可直接移除/插入节点,或用
hidden属性(兼容性好,语义清晰) - 避免只改样式却不删 DOM——影响屏幕阅读器和键盘焦点流
- 监听
storage事件:当其他标签页修改了panel-visible-columns,当前页自动 reload 列状态 - 用户快速连续切换多个列时,用
setTimeout防抖,延迟 200ms 再统一保存,减少 I/O 次数 - 提供“恢复默认”按钮,执行
localStorage.removeItem('panel-visible-columns')即可重置
同步多标签页与防抖写入
用户可能在另一个标签页调整了列设置,当前页应响应;同时避免频繁点击导致 localStorage 写入卡顿。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











