DataTables - 1.10 中的非英文字母排序
DataTables - non-english letters sorting in 1.10
如何修复 DataTables 1.10 中非美国字母(如 š,č,ť
)的排序?
例如,"š"
类似于 "s"
,但现在这些字符(以这些字符开头的单词)位于末尾(A-Z 之后)。
DataTables 1.10 版需要它。
这对测试用例、奇数示例、有关您的区域设置和语言的一些信息等确实有帮助。但是,我认为您可以简单地通过在自定义排序插件中使用 localeCompare()
来解决这个问题,指定您的语言环境并且非常重要:将 sensitivity
级别设置为 'accent'
:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"locale-compare-asc": function ( a, b ) {
return a.localeCompare(b, 'da', { sensitivity: 'accent' })
},
"locale-compare-desc": function ( a, b ) {
return b.localeCompare(a, 'da', { sensitivity: 'accent' })
}
});
用法
var table = $('#example').DataTable({
columnDefs : [
{ targets: 0, type: 'locale-compare' }
]
})
如前所述,无法确定 - OP 中的信息很少,但理论上在大多数情况下这应该可以完成工作。至少它对我有用。请记住传递有效的 locale
字符串,da
(丹麦语)仅用于示例目的。
我的解决方案基于https://datatables.net/blog/2017-02-28
在 DataTables 初始化设置字符串比较函数之前。就我而言,它适用于波兰语 (pl)。
let locale = 'pl'
let order = $.fn.dataTable.ext.type.order
delete order['string-pre']
order['string-asc'] = function(a, b) {return a.localeCompare(b, locale)}
order['string-desc'] = function(a, b) {return b.localeCompare(a, locale)}
然后初始化
$('.my-table').dataTable( ... )
如何修复 DataTables 1.10 中非美国字母(如 š,č,ť
)的排序?
例如,"š"
类似于 "s"
,但现在这些字符(以这些字符开头的单词)位于末尾(A-Z 之后)。
DataTables 1.10 版需要它。
这对测试用例、奇数示例、有关您的区域设置和语言的一些信息等确实有帮助。但是,我认为您可以简单地通过在自定义排序插件中使用 localeCompare()
来解决这个问题,指定您的语言环境并且非常重要:将 sensitivity
级别设置为 'accent'
:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"locale-compare-asc": function ( a, b ) {
return a.localeCompare(b, 'da', { sensitivity: 'accent' })
},
"locale-compare-desc": function ( a, b ) {
return b.localeCompare(a, 'da', { sensitivity: 'accent' })
}
});
用法
var table = $('#example').DataTable({
columnDefs : [
{ targets: 0, type: 'locale-compare' }
]
})
如前所述,无法确定 - OP 中的信息很少,但理论上在大多数情况下这应该可以完成工作。至少它对我有用。请记住传递有效的 locale
字符串,da
(丹麦语)仅用于示例目的。
我的解决方案基于https://datatables.net/blog/2017-02-28
在 DataTables 初始化设置字符串比较函数之前。就我而言,它适用于波兰语 (pl)。
let locale = 'pl'
let order = $.fn.dataTable.ext.type.order
delete order['string-pre']
order['string-asc'] = function(a, b) {return a.localeCompare(b, locale)}
order['string-desc'] = function(a, b) {return b.localeCompare(a, locale)}
然后初始化
$('.my-table').dataTable( ... )