jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)
Posted
技术标签:
【中文标题】jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)【英文标题】:jQuery dataTables sorting is incorrect (latin letter D with stroke) 【发布时间】:2017-08-04 10:23:49 【问题描述】:我有一张表,需要按一列升序排序,但“Đ Garrett Winters”在“Tiger Nixon”之后
列名中的正确顺序是“Ashton Cox”、“Cedric Kelly”、“Đ Garett Winters”、“Tiger Nixon”...
Example
jQuery.extend( jQuery.fn.dataTableExt.oSort,
"non-empty-string-asc": function (str1, str2)
if(str1 == "")
return 1;
if(str2 == "")
return -1;
return ((str1 < str2) ? -1 : ((str1 > str2) ? 1 : 0));
,
"non-empty-string-desc": function (str1, str2)
if(str1 == "")
return 1;
if(str2 == "")
return -1;
return ((str1 < str2) ? 1 : ((str1 > str2) ? -1 : 0));
);
$('#example').dataTable(
columnDefs: [
type: 'non-empty-string', targets: 0 // define 'name' column as non-empty-string type
]
);
<table id="example" class="display" cellspacing="0" >
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>$320,800</td>
</tr>
<tr>
<td>Đ Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>$170,750</td>
</tr>
<tr>
<td>Ashton Cox</td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td>Cedric Kelly</td>
<td>Senior javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
<tr>
<td></td>
<td>Junior Technical Author</td>
<td>San Francisco</td>
<td>66</td>
<td>2009/01/12</td>
<td>$86,000</td>
</tr>
<tr>
<td></td>
<td>Senior Javascript Developer</td>
<td>Edinburgh</td>
<td>22</td>
<td>2012/03/29</td>
<td>$433,060</td>
</tr>
</tbody>
</table>
【问题讨论】:
【参考方案1】:试试谷歌“javascript diacritics”。它是“添加到字母的字形”的术语。这意味着在ă
、ş
、ţ
或Đ
和đ
(latin letter D with stroke) 等许多语言中发现的所有重音或特殊字符。
显然,这些字符的 unicode 值高于其“正常”对应部分,因此排序不同。基本上你想像这样“规范化”字符,所以你可以从人类的角度以理智的方式对字符串进行排序。作为一个我们使用重音字母的国家的公民,这是一个非常普遍的问题。
幸运的是,有很多编写良好的库/函数可以做到这一点。
查看这个出色的实现 -> http://web.archive.org/web/20120918093154/http://lehelk.com/2011/05/06/script-to-remove-diacritics
您可以直接使用它,只需使用pre
pare 方法扩展您的插件:
jQuery.extend( jQuery.fn.dataTableExt.oSort,
"non-empty-string-pre": function(str)
return removeDiacritics(str)
,
"non-empty-string-asc": function (str1, str2)
...
,
"non-empty-string-desc": function (str1, str2)
...
);
就是这样!查看更新的工作小提琴 -> https://jsfiddle.net/xshh5np8/56/
【讨论】:
非常感谢,我已经修好了 :)【参考方案2】:'D'和'Đ'(D with Stroke)在计算机中的表示(和处理)不同,如果您希望它按字母顺序排序,我建议将Đ更改为通常的'D' .
另一种解决方案是在对表格进行排序时,通过字符串比较以相同的方式处理“D”和“Đ”。
(我很抱歉,但我不能 100% 理解你在 jQuery 中试图做什么)
【讨论】:
以上是关于jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Datatables Ultimate 日期/时间排序插件
jQuery 插件 (DataTables) 仅在页面刷新时正确加载