为数据表中的自然排序添加例外

Add exception to natural sorting in datatables

有没有办法向 natural ordering plugin 添加例外,以便它忽略 c. []? 之类的内容?

这是我的数据示例:

161?
1604
[1563]
C。 1476

我想要升序排序。输出为:

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: this is my data 在野外。

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

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

根据您在评论中的说明,我认为您不需要或不需要此附加组件。

相反,您可以使用具有 DataTables 存储能力的列渲染器 different versions of a value - 用于显示、排序和过滤。

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 语句的注释以将数字作为数字获取。

不过...

这种从数据中剥离非数字的粗略方法符合您问题中的狭义示例,但它可能不足以满足您期望处理的所有数据。因此,您可能需要改进“替换”逻辑。

不过render函数应该能满足你的需求,更一般。