如何在jqGrid colModel中实现按行独立判断单元格条件样式
jqGrid Value列动态阈值样式配置方案
原代码问题修正方向
- 原来的cellattr只输出日志没有返回值,jqGrid要求该函数必须返回可作用于单元格的HTML属性字符串才能生效
- 原来的阈值判断写死了固定数值,应该通过cellattr自带的行数据参数读取当前行的上下限,适配每行独立配置
前置字段对应要求
先确保colModel每列的name和后端get-data.php返回的字段完全匹配,示例约定映射关系:
- colNames里的
upper limit对应后端字段名upperLimit,colModel中该列name设为upperLimit - colNames里的
lower limit对应后端字段名lowerLimit,colModel中该列name设为lowerLimit - colNames里的
Value对应后端监测值字段,colModel中该列name设为value
可用的colModel完整配置
colModel: [ { name: "name", label: "Name", width: 100 }, // Value列动态样式配置 { name: "value", label: "Value", width: 120, cellattr: function(rowid, cellValue, rawObject, colModel, currentRowData) { // 转数值避免字符串比较出错 const val = Number(cellValue); const upper = Number(currentRowData.upperLimit); const lower = Number(currentRowData.lowerLimit); // 超阈值判断 if (val >= upper || val <= lower) { // 直接返回样式属性字符串 return 'style="color:red;font-weight:bold;"'; } return ""; } }, { name: "upperLimit", label: "upper limit", width: 100 }, { name: "lowerLimit", label: "lower limit", width: 100 }, { name: "stock", label: "stock", width: 80 } ]
常见踩坑提醒
- 如果后端返回的上下限字段名不是
upperLimit/lowerLimit,直接把代码里currentRowData.后面的字段名换成实际返回的就行 - 数值转换的步骤不能省,后端如果返回的是字符串类型的数字,直接比大小会出现"9" > "10"这类错误
- 如果不想用内联样式,也可以返回
class="text-danger"这类自定义类,提前在样式表里定义对应类的样式即可
内容的提问来源于stack exchange,提问作者Jess163
相关产品推荐
相关产品推荐

