首页 > 解决方案 > 为数据表中的自然排序添加例外

问题描述

有没有办法向自然排序插件添加异常,以便它忽略诸如c. , [, ],之类的东西?

这是我的数据示例:

161?
1604
[1563
] 1476

我想要排序的 asc。输出为:

C。1476
[1563]
1604
161?

现在我得到的是所有的数字,然后是字符串[

我的初始化代码:

<script type="text/javascript" src="//cdn.datatables.net/plug-ins/1.10.24/sorting/natural.js"></script>

$('#sourcesList').DataTable({
          "paging": false,
          "columnDefs": [
            { type: 'natural-nohmtl', targets: '_all' }
          ],
[...]

PS:这是我在野外的数据。

标签: datatables

解决方案


自然排序选项处理您可以合理预期在“现实世界”中遇到的某些类型的数字数据 - 例如具有不同千位分隔符的数字,或不同位置的不同类型的货币符号 - 或“第一个”, “第 2 次”“第 3 次”等等。不要在这些确切的例子中引用我,因为我没有详细查看那个附加组件。但这是总体思路。

问号之类的项目-我不希望该插件能够处理这些问题。方括号中的项目 - 同样的事情。

鉴于您在评论中的澄清,我认为您不需要或不想要这个附加组件。

相反,您可以使用具有 DataTables 能力的列渲染器来存储不同版本的值- 用于显示、排序和过滤。

var dataSet = [ ["161?"], ["1604"], ["[1563]"], ["c. 1476"] ];
 
$(document).ready(function() {

    $('#example').DataTable( {
        data: dataSet,
        columnDefs: [ { 
          type: "natural-nohmtl", 
          targets: [ 0 ],
          title: "My Data",
          "render": function ( data, type, row, meta ) {
            if ( type === 'sort' ) {
              //return parseInt(data.replace(/\D/g, '')); // numbers as numbers
              return data.replace(/\D/g, ''); // numbers as strings
            } else {
              return data;
            }
          }
        } ]
    } );
    
} );

这保存了每个值的版本,其中所有非数字从值中剥离,使用replace(/\D/g, ''). 数据的这个更改版本存储为排序时将使用的值。未更改的版本是用户将看到的。

我的结果:

在此处输入图像描述

这是将数字视为文本的情况。

您可以取消注释已注释掉的return语句以获取数字作为数字。

然而...

这种从数据中去除非数字的粗略方法符合您问题中的狭窄示例,但对于您期望处理的所有数据而言,它可能还不够。因此,您可能需要细化“替换”逻辑。

但是渲染功能应该更普遍地满足您的需求。


推荐阅读