如何在JqGrid中通过多个条件值匹配获取指定数据行?
JqGrid 三条件匹配获取目标行实现方案
优先使用jqGrid原生API实现,相比手动遍历DOM的方案准确率更高、性能更好,不会受列隐藏、单元格格式化、分页配置影响
方案1:调用原生数据接口匹配(推荐)
你已经在colModel中完成了三个字段的配置,直接读取jqGrid缓存的行数据做匹配即可,不需要操作DOM:
// 替换为你实际的三个匹配值 const matchVal1 = 'refNum列对应目标值'; const matchVal2 = 'refNum2列对应目标值'; const matchVal3 = 'refNum3列对应目标值'; const gridTableId = 'grid'; // 替换为你实际的jqGrid表格ID // 读取表格全量本地缓存数据 const rowDataList = $(`#${gridTableId}`).jqGrid('getGridParam', 'data'); let targetRowId = null; // 多条件遍历匹配 for (const row of rowDataList) { if (row.refNum === matchVal1 && row.refNum2 === matchVal2 && row.refNum3 === matchVal3) { targetRowId = row.id; break; } } // 匹配到行ID后即可直接获取行DOM、执行后续更新操作 if (targetRowId) { const $targetRow = $(`#${gridTableId} tr#${targetRowId}`); // 自定义行操作逻辑 }
方案2:DOM遍历过滤写法
如果需要直接通过DOM匹配,替换你原来的单条件过滤逻辑即可,注意不要用全局选择器、不要用模糊匹配的:contains避免误匹配:
// 替换为你实际的三个匹配值 const matchVal1 = 'refNum列对应目标值'; const matchVal2 = 'refNum2列对应目标值'; const matchVal3 = 'refNum3列对应目标值'; const gridTableId = 'grid'; const $targetRow = $(`#${gridTableId} tr.jqgrow`).filter(function() { const $currentRow = $(this); // jqGrid单元格自带aria-describedby属性,格式为「表格ID_列名」,可精准定位对应列的单元格 const isMatch1 = $currentRow.find(`td[aria-describedby="${gridTableId}_refNum"]`).text().trim() === matchVal1; const isMatch2 = $currentRow.find(`td[aria-describedby="${gridTableId}_refNum2"]`).text().trim() === matchVal2; const isMatch3 = $currentRow.find(`td[aria-describedby="${gridTableId}_refNum3"]`).text().trim() === matchVal3; return isMatch1 && isMatch2 && isMatch3; });
注意事项
- 不要使用
$("td")这类全局选择器,会匹配页面所有表格的单元格,大概率出现误匹配 :contains属于模糊匹配规则,只要单元格文本包含传入值就会命中,精准匹配场景不建议使用- 如果你的表格是远程数据加载、开启了分页,方案1只会读取当前页的缓存数据,需要跨页匹配的话要先把全量数据存在本地变量里再做遍历
内容的提问来源于stack exchange,提问作者Matha
相关产品推荐
相关产品推荐

