火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

表格行显示隐藏:直接改 display 翻车了

发布于 2天前
2

表格加个行筛选功能,听着不难。第一版直接给 tr 改 style.display,功能是跑起来了,后面越改越乱 📋。行内样式像狗皮膏药一样贴得到处都是,class 控制全部失效,只好重写。

白纸上的勾选清单
行显隐本质是状态管理,不该散落在行内样式里

翻车点:直接改 style

行内样式优先级最高。第一版图省事 tr.style.display = 'none',之后想加「仅显示异常行」之类的批量功能,class 写了不生效,原因全是行内样式在挡路 ⚠️。

重写:状态交给 class

tr.hidden { display: none; }

row.classList.toggle('hidden', !match);

显隐只是一个类的增删,批量操作、组合筛选都顺了。恢复时不用记着之前是 table-row 还是别的值,把类摘掉就行 ✅。

筛选条件存 data 属性

<tr data-status="overdue" data-type="invoice">

条件挂在 data-* 上,JS 读属性做判断。别去比对单元格文本,文案一改筛选全废。

两个结构上的坑

  • 分组行、汇总行常带 colspan,隐藏明细行时记得同步处理,不然剩下孤零零一行合计。
  • tr 不支持高度过渡,想要收起动画只能包一层 div 或者退而求其次用透明度。

结论:显隐是状态不是样式,状态收进 class 与 data 属性,行内 style 一行都别碰。

常见问题(FAQ)

隐藏的 tr 恢复显示用什么值?
最稳妥是恢复为移除隐藏类,或者 display 还原为空字符串。写死 table-row 也可以,但经手行内样式容易留尾巴。
直接改 style.display 有什么坑?
行内样式优先级高于 class。混入行内控制后,后续基于 class 的批量显隐会被挡住,状态也难以追踪。
筛选条件适合存在哪里?
挂在 tr 的 data-* 属性上。JS 读属性判断,不依赖单元格文本,文案调整不会影响筛选逻辑。
隐藏行会影响 colspan 行吗?
需要。带 colspan 的分组行或汇总行要同步显隐,否则明细藏完会剩下对不上的合计行。
表格行收起动画怎么做?
tr 不支持高度过渡。可在单元格内部包 div 做高度动画,或者改用透明度与位移的折中方案。
classListdata属性display属性行过滤表格行显隐
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1