最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Layui表格里怎么实现根据数值正负显示红绿不同颜色
时间:2026-06-13 09:57:04 编辑:袖梨 来源:一聚教程网
Layui表格数值颜色渲染需用templet或cellStyle:templet手动拼HTML(注意字段名、return和零值),cellStyle(2.8+)更轻量但仅控制样式;reload时须显式传cols防丢失,同时注意字符串转数字、负数括号及兼容性。
表格列中用 templet 渲染带颜色的数值
layui 的 table.render() 不支持直接给单元格设 css 类名依赖数值,得靠 templet 手动控制输出 html。核心是把原始值包裹进带样式的 <span>,根据正负动态加类或内联样式。
常见错误是直接在 templet 里写 if (d.price > 0) {...} 却忘了 d 是当前行数据对象,字段名要和 cols 中定义的 field 一致;另外别漏掉 return,否则渲染为空。
- 推荐用内联样式,避免额外定义 CSS 类:
templet: function(d){ return d.amount >= 0 ? '<span style="color:#52c418">' + d.amount + '</span>' : '<span style="color:#f5222d">' + d.amount + '</span>'; } - 如果要用 class,确保全局 CSS 已加载:
<span class="num-positive">和<span class="num-negative">,并在页面中补充.num-positive{color:#52c418} .num-negative{color:#f5222d} - 注意零值处理:按业务需要决定
0算正还是中性,别让0被归到负色里
用 cellStyle 实现更干净的颜色控制(Layui 2.8+)
新版 Layui 支持列级 cellStyle 回调函数,比 templet 更轻量——它只负责返回样式对象,不干扰内容渲染,适合纯样式需求。
容易踩的坑是误以为 cellStyle 能改内容,其实它只影响 style 属性;而且这个配置必须写在具体列定义里,不能放在顶层 table.render() 配置中。
- 写法示例:
{ field: 'profit', title: '利润', cellStyle: function(row, col, value){ return value >= 0 ? { color: '#52c418' } : { color: '#f5222d' }; } } - 兼容性注意:低于 2.8 的 Layui 没这个 API,强行使用会静默失效,建议先查
layui.version - 性能友好:相比
templet,cellStyle不触发 DOM 重建,适合大数据量表格
负数括号显示 + 颜色同步(如 “(123)” 红色)
财务场景常要求负数加括号且变红,这时 templet 更灵活,cellStyle 只管颜色,不管内容格式。
关键点在于字符串拼接时别丢原始符号逻辑——别用 Math.abs() 后再手动加括号却不判断原值,否则 -0 或科学计数会出错。
- 安全写法:
templet: function(d){ var v = d.balance; return v >= 0 ? '<span style="color:#52c418">' + v + '</span>' : '<span style="color:#f5222d">(' + Math.abs(v) + ')</span>'; } - 避免用
v.toString().startsWith('-')判断负号,因为-0返回"-0"但-0 >= 0为true,语义更稳 - 如果后端返回的是字符串(如
"-123.45"),先parseFloat()再比较,否则"-5" > 0是true(字符串比较)
表格重载后颜色丢失?检查 reload 是否覆盖了列配置
调用 table.reload() 时若只传 where 或 page,原有列定义里的 templet 或 cellStyle 不会被继承,导致颜色消失。
本质是 reload 默认只合并部分参数,列配置(cols)不属于自动合并项。
- 正确做法:重载时显式传入完整列配置,或从原实例取
config.cols复用:table.reload('id', { cols: tableIns.config.cols, where: {...} }); - 更省事:把列定义抽成变量,reload 时直接引用,避免硬编码重复
- 调试技巧:在
done回调里打印tableIns.config.cols[0],确认templet还在不在