jQuery DataTable搜索结果自定义排序:实现Y开头列值行优先展示
问题解答
1. 自定义排序返回值规则
你用到的$.fn.dataTable.ext.type.order下的自定义排序属于pre-format类型的排序插件,函数返回值是对应行的排序权重,权重值越小,排序时位置越靠前。你原本的升序、降序逻辑返回值写反了:
- 升序(asc)场景下,要让Y开头的条目排前面,应该给Y开头的返回更小的权重,非Y开头的返回更大的权重
- 降序(desc)场景下逻辑反过来即可
2. 搜索后自动按规则排序的实现方案
推荐直接用默认排序配置方案,DataTable默认在搜索、数据加载、分页后都会自动应用当前生效的排序规则,不需要额外做事件监听。
修正后的完整代码
首先修正自定义排序逻辑:
// 升序:Y开头返回更小权重,排最前 $.fn.dataTable.ext.type.order['airport-first-asc'] = function (ac) { // 如果需要兼容小写y开头,可以改成 ac.toLowerCase().startsWith("y") return ac.startsWith("Y") ? 0 : 1; }; // 降序:Y开头返回更大权重,排最后(可根据实际需求调整) $.fn.dataTable.ext.type.order['airport-first-desc'] = function (ac) { return ac.startsWith("Y") ? 1 : 0; };
然后在DataTable初始化参数中添加默认排序配置:
function setupTable() { var table = $('#locTable').DataTable({ ajax: '/locations/data', lengthChange: false, processing: true, scrollY: "400px", paging: true, // 新增默认排序规则:按第1列(索引为1,也就是你配置了自定义排序类型的列)升序排列 order: [[1, 'asc']], language: { searchPlaceholder: "Enter Location", search: "", processing: "<i class='fa fa-cog fa-spin fa-3x fa-fw'></i><span class='sr-only'>Loading...</span>", }, columnDefs: [ { searchable: false, targets: [2, 3, 5] }, { render: function (data, type, row) { return (Math.round(data * 100) / 100).toFixed(2); }, targets: [2, 3] }, { type: "airport-first", targets: 1 } ], searchDelay: 350, pageLength: 100, dom: '<fi<tr><"bottom"p>>', }); return table; }
以上配置生效后,每次搜索完成表格会自动应用Y开头条目优先的排序规则,完全符合你给出的预期效果。
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

