【问题标题】:jQuery dataTables sorting is incorrect (latin letter D with stroke)jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)
【发布时间】: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" width="100%">
    <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>

【问题讨论】:

    标签: jquery sorting datatables


    【解决方案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

    您可以直接使用它,只需使用prepare 方法扩展您的插件:

    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 中试图做什么)

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 2021-08-22
      • 2017-06-20
      • 1970-01-01
      • 2014-03-17
      • 2021-01-07
      相关资源
      最近更新 更多