如何在DataTables的search.push函数中获取data-sort正交值?
解决DataTables自定义搜索中获取
data-sort/data-filter属性的问题 嘿,这个问题我太熟了!你现在遇到的情况是:在DataTables的自定义搜索函数里,data参数默认只返回单元格的display类型正交数据(也就是页面上显示的文本内容),但拿不到你手动设置的data-sort或data-filter属性值。下面给你两个实用的解决方案:
方案1:直接通过DOM元素提取属性值
既然能拿到当前行的索引dataIndex,我们可以借助DataTables的API定位到对应的DOM行元素,再提取目标属性:
$.fn.dataTable.ext.search.push( function (settings, data, dataIndex) { // 1. 将settings转换为DataTables API实例 const table = new $.fn.dataTable.Api(settings); // 2. 根据索引获取当前行的DOM节点 const rowDom = table.row(dataIndex).node(); // 3. 定位到目标列的td元素(注意:索引从0开始,eq(2)对应第三列,和data[2]对应) const targetTd = $(rowDom).find('td:eq(2)'); // 4. 获取data-sort和data-filter的值 const dataSortValue = targetTd.data('sort'); const dataFilterValue = targetTd.data('filter'); // 用拿到的值做筛选逻辑 const iRating = parseFloat(dataSortValue) || 0; // ...你的筛选判断,最后返回true/false决定是否显示该行 });
这个方法的好处是不需要修改表格初始化配置,直接针对已渲染的DOM操作,适合快速解决问题。
方案2:利用DataTables正交数据体系(更推荐)
如果你的表格是通过数据源(比如JSON)初始化的,更优雅的方式是把data-sort/data-filter的值提前配置到DataTables的正交数据体系中,这样在搜索函数里就能直接从内部缓存读取:
第一步:初始化表格时配置正交数据
$('#your-table-id').DataTable({ columns: [ // 其他列配置... { data: 'rating', // 基础数据源字段 render: function(data, type, row) { // 根据不同正交类型返回对应值 switch(type) { case 'display': return data; // 页面显示内容 case 'sort': return row.ratingSort; // 对应data-sort的值(从你的数据源中获取) case 'filter': return row.ratingFilter; // 对应data-filter的值 default: return data; } } } ] });
第二步:在搜索函数中获取指定类型的正交数据
$.fn.dataTable.ext.search.push( function (settings, data, dataIndex) { const table = new $.fn.dataTable.Api(settings); // 直接获取第2列的sort类型数据 const sortValue = table.cell(dataIndex, 2).data('sort'); // 获取filter类型数据 const filterValue = table.cell(dataIndex, 2).data('filter'); const iRating = parseFloat(sortValue) || 0; // ...你的筛选逻辑 });
这个方法更符合DataTables的设计理念,性能更优(尤其是大数据量表格),因为不需要频繁操作DOM,直接从DataTables的内部数据缓存读取。
小提醒
注意列索引的计数:不管是data[2]还是td:eq(2),都是从0开始计数的,一定要确认你要操作的列索引是否正确哦!
内容的提问来源于stack exchange,提问作者alwaysVBNET
相关产品推荐
相关产品推荐

