DataTables初始化排序异常咨询:ID大于100时排序错误
问题分析与解决方案
你的代码语法本身是正确的,但出现排序异常的核心原因是DataTables把ID列识别成了字符串类型,因此执行的是字典序排序,而非我们预期的数值排序。
举个直观的例子:字符串比较时,"98"的第一个字符"9"的ASCII码比"190"的第一个字符"1"大,所以"98"会排在"190"前面——这就是你看到98、99出现在190、189之前的原因。
解决方法
方法1:指定列的排序类型(推荐)
从你使用的aaSorting、iDisplayLength这些API可以看出,你在用旧版DataTables。我们可以通过aoColumns配置,明确告诉DataTables第2列(索引从0开始)是数值类型:
$('#datatabable').dataTable({ "aaSorting" : [ [ 2, "desc" ] ], "iDisplayLength" : 5, "aLengthMenu" : [ [ 5, 10, 20, -1 ], [ 5, 10, 20, "All" ] ], "sPaginationType" : "full_numbers", "aoColumns": [ null, // 第0列,保持默认配置 null, // 第1列,保持默认配置 { "sType": "numeric" } // 第2列,指定为数值排序类型 ] });
方法2:使用data-sort属性辅助排序
如果暂时没法修改JS配置,也可以在HTML的ID列单元格上添加data-sort属性,把ID的数值作为属性值,让DataTables基于这个值排序:
<td data-sort="98">98</td> <td data-sort="99">99</td> <td data-sort="190">190</td>
这样DataTables会优先读取data-sort里的数值进行排序,避开字符串排序的逻辑问题。
内容的提问来源于stack exchange,提问作者Shubham Sharma
相关产品推荐
相关产品推荐

