最直接方式是在templet函数中拼接单位:templet: function(d) { return (d.price || 0).tofixed(2) + ' 元'; },确保空值兜底、精度控制,并避免污染数据或破坏表格状态。

layui表格的templet函数里拼接单位最直接
layui 的 table.render() 中,列配置用 templet 是唯一可控、不破坏原生渲染逻辑的方式。别想用 event 或外部遍历 DOM 加后缀——表格重绘、分页、排序时会丢掉;也别改 data 源数组,污染原始数据。
常见错误是写成字符串模板:templet: '{d.price} 元',这在字段为空或非数字时容易显示 undefined 元 或 NaN 元。
- 用函数形式
templet: function(d) { return (d.price || 0).toFixed(2) + ' 元'; } - 若单位需动态(如不同行单位不同),从
d对象取对应字段:templet: function(d) { return d.value + ' ' + (d.unit || ''); } - 注意:
templet函数返回值必须是字符串,不能返回 JSX 或 DOM 节点
用parseData统一处理原始数据再加单位?不推荐
parseData 是用来修正服务端返回结构的(比如把 {count:100,data:[]} 映射为 layui 要求的格式),不是做视图层修饰的地方。在这里给字段拼单位,会导致:
- 导出 Excel 时单位也被写入(除非额外拦截
export事件) - 搜索/筛选功能误匹配带单位的字符串(比如搜
100找不到100 元) - 后续 JS 逻辑若再读
table.cache,拿到的是带单位的“假数值”
如果单位要响应式切换(如用户点按钮换“元/kg”→“美元/lb”)
核心是重载该列的 templet 并调用 table.reload(),但注意别全表刷新——性能差且丢失当前页码/排序状态。
- 先保存当前表格实例:
var tableIns = table.render({...}); - 切换单位时,修改列定义中的
templet函数引用(建议提前写好多个 templet 函数),然后:tableIns.config.cols[0][2].templet = priceTempletUsd; - 只重载数据:
table.reload('yourTableId', { data: tableIns.config.data });—— 这样保留分页、排序等状态
小数位数和空值处理常被忽略
价格、重量这类带单位的数值,前端展示必须控制精度,否则 199.99999999999997 后加 元 就很尴尬。同时,null、undefined、'' 都应兜底。
推荐写法:
templet: function(d) {
var val = d.weight;
if (val == null || val === '') return '-';
return parseFloat(val).toFixed(3) + ' kg';
}
注意 parseFloat 能容错字符串数字,toFixed 前必须确保是有效数字,否则会报 Cannot read property 'toFixed' of NaN。
单位本身是视觉层内容,跟数据语义无关,所以它只该出现在 templet 里,且每次渲染都重新生成——这才是最轻、最稳的做法。











