You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataTables含字母数字混合的列忽略字母按数字排序?

实现DataTables混合列按数字部分排序

完全可以实现忽略字母、仅按数字部分排序的需求,你可以通过自定义DataTables的排序插件达成目标,具体操作如下:

  • 步骤1:注册自定义排序规则
    定义一个自定义排序类型,提取第一列字符串里的数字段(即从第三个-分隔后的部分,比如AA-EC-1991-175中的1991-175),以此作为排序依据。

  • 步骤2:指定列排序类型
    初始化DataTables时,为第一列配置使用这个自定义排序规则。


修改后的完整代码

JavaScript部分

// 注册自定义排序插件
$.fn.dataTable.ext.type.order['numeric-part-pre'] = function(data) {
  // 提取字符串中从第三个'-'开始的数字段
  const parts = data.split('-');
  if (parts.length >= 3) {
    return parts.slice(2).join('-');
  }
  return data; // 处理格式异常的情况
};

$(document).ready(function() {
  var table = $('#example_full').DataTable({
    responsive: true,
    paging: false,
    searching: true,
    lengthChange: false,
    bInfo: false,
    bSort: true,
    columnDefs: [
      { 
        targets: 0, // 目标为第一列
        type: 'numeric-part-pre' // 应用自定义排序规则
      }
    ]
  });
});

HTML部分

<!DOCTYPE html>
<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
    <script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
    <meta charset=utf-8 />
  </head>
  <body>
    <table id="example_full" class="row-border stripe dataTable no-footer dtr-inline" role="grid" style=" width: 100%;">
      <thead>
        <tr>
          <th>1</th>
          <th data-orderable="false">2</th>
          <th data-orderable="false">3</th>
          <th data-orderable="false">4</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-1991-175</p></td>
          <td>test1</td>
          <td>5</td>
          <td>16</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-1991-190</p></td>
          <td>test2</td>
          <td>test2</td>
          <td>test2</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-2011-50</p></td>
          <td>test3</td>
          <td>test3</td>
          <td>test3</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-2014-90</p></td>
          <td>test4</td>
          <td>test4</td>
          <td>test4</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-2021-11</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-MW-1991-136</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-WE-2011-99</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>OTS-AP-2010-03</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-WE-2011-99</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
        <tr>
          <td nowrap="nowrap"><p>AA-EC-2009-98</p></td>
          <td>test5</td>
          <td>test5</td>
          <td>test5</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

效果说明

使用上述代码后,第一列会自动忽略前面的字母前缀,仅按xxxx-xxx格式的数字段排序,升序结果完全符合预期:

  • AA-MW-1991-136(第一)
  • AA-EC-1991-175(第二)
  • AA-EC-1991-190(第三)

内容的提问来源于stack exchange,提问作者magicsinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:41:04