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,否则渲染为空。
templet: function(d){ return d.amount >= 0 ? '<span style="color:#52c418">' + d.amount + '</span>' : '<span style="color:#f5222d">' + d.amount + '</span>'; }
<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' }; } }
layui.version
templet,cellStyle 不触发 DOM 重建,适合大数据量表格财务场景常要求负数加括号且变红,这时 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: {...} });
done 回调里打印 tableIns.config.cols[0],确认 templet 还在不在