使用DataTables Absolute插件后ID列排序异常(INT转STRING)求助
解决DataTables Absolute插件导致ID列排序异常(字符串转数字)的问题
问题根源
你在使用absoluteOrder插件时,将置顶值设为字符串'8',插件会默认按字符串规则处理整个列的排序逻辑,覆盖了原本的数字类型,导致排序异常。
解决方案
修改两个关键地方:
- 将
absoluteOrder中的置顶值改为数字类型而非字符串 - 确保排序逻辑先处理置顶规则,再按数字类型排序
修改后的完整代码
$(document).ready(function(){ // 将value改为数字8,而非字符串'8' var Str__ID = $.fn.dataTable.absoluteOrder([ { position: 'top', value: 8 // 关键修改:用数字代替字符串 } ]); $.fn.dataTable.moment('DD/MM/YYYY'); $('#DT__List').DataTable({ "dom": 'lBfrtip', "columnDefs": [{ "orderable": false, "targets": [3] },{ "type": Str__ID, "targets": [0], // 强制将列数据解析为整数,避免字符串排序干扰 "render": function(data){ return parseInt(data, 10); } }], "info": true, "fixedHeader": true, "language": { "aria": { "sortAscending": ": ativar para classificar a coluna ascendente", "sortDescending": ": ativar para classificar a coluna descendente" }, "buttons": { "copy": "Copiar", "copySuccess": { _: "( %d ) linhas copiadas para a área de transferência!", 1: "( 1 ) linha copiada para a área de transferência!" }, "copyTitle": "Copiar", "csv": "CSV", "excel": "Excel", "pdf": "PDF", "print": "Imprimir" }, "emptyTable": "Não há registro(s)!", "info": "Página _PAGE_ de _PAGES_", "infoEmpty": "Não há registro(s)!", "infoFiltered": " (Do total de _MAX_ registro(s))", "lengthMenu": "Mostrar _MENU_ registro(s) em cada página", "loadingRecords": "Carregando…", "paginate": { "first": "Primeira", "last": "Última", "next": "Próxima", "previous": "Anterior" }, "processing": "Processando…", "search": "Pesquisar:", "searchPlaceholder": "Pesquisar…", "zeroRecords": "Opsss, não encontramos nada através da sua pesquisa!" }, "order": [[0,"desc"]], "ordering": true, "pageLength": 10, "paging": true, "select": true }); });
关键修改说明
- 置顶值类型修正:将
value: '8'改为value: 8,让插件识别这是数字值,后续排序时不会强制转成字符串。 - 强制数字解析:添加
render函数确保单元格数据被解析为整数,彻底避免字符串排序逻辑的干扰。
验证效果
修改后,ID=8的行仍会固定在顶部,其余行将按数字规则排序:
- 升序:8 → 1 → 2 → 3 ... → 10
- 降序:8 → 10 → 9 → 8 ... → 1
内容的提问来源于stack exchange,提问作者Danilo Rago
相关产品推荐
相关产品推荐

