如何提取DataTable过滤后行的原始rowIndex而非_DT_RowIndex?
提取DataTable筛选行的原始索引并同步筛选规则
方法一:从原始数据源提取(最可靠)
如果你的DataTable初始化时,原始数据中本身就包含了原始rowIndex(比如后端返回的唯一ID、原始序列值),直接通过rows().data()获取原始数据后提取即可,这是最高效且不易出错的方式:
// 获取筛选后所有行的原始数据集合 const filteredData = table.rows({ filter: 'applied' }).data(); // 转换为数组并提取原始索引(假设原始数据字段名为originalRowIndex) const originalRowIndexes = filteredData.toArray().map(row => row.originalRowIndex);
方法二:从DOM节点属性提取
如果渲染表格时,原始索引被写入了<tr>元素的自定义属性(比如data-original-index),可以通过rows().nodes()获取DOM节点后读取属性:
// 获取筛选后所有行的DOM节点 const filteredNodes = table.rows({ filter: 'applied' }).nodes(); // 遍历节点提取原始索引,按需转为数字类型 const originalRowIndexes = Array.from(filteredNodes).map(tr => Number(tr.getAttribute('data-original-index')));
更优方案:直接同步筛选规则到其他表格
你的目标是将相同筛选规则应用到其他表格,无需提取原始索引,直接同步当前表格的筛选状态会更高效且避免数据匹配误差:
// 获取当前表格的全局搜索关键词 const globalSearch = table.search(); // 获取每一列的筛选条件(适用于开启列筛选的场景) const columnSearches = table.columns().every(function() { return this.search(); }).toArray(); // 将筛选规则应用到目标表格otherTable otherTable.search(globalSearch); // 同步每一列的筛选条件(draw(false)避免多次重绘) otherTable.columns().every(function(idx) { this.search(columnSearches[idx]).draw(false); }); // 统一触发一次表格绘制 otherTable.draw();
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

