为数据表中的自然排序添加例外
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函数应该能满足你的需求,更一般。
有没有办法向 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函数应该能满足你的需求,更一般。