如何为jQuery数据表编写自定义排序?

时间:2014-08-19 09:52:24

标签: javascript jquery sorting datatables

我使用的是jQuery插件Datables:http://www.datatables.net/

我的例子在这里:http://live.datatables.net/wanebotu/1/edit

我的示例表中有几列,其中一列是“Name”。我添加了一些相同的名称,但一个以大写开头,另一个全部小写。例如:阿什顿考克斯,阿什顿考克斯。但是,我确实认为数据表中使用的默认排序不区分大小写,这意味着排序是“稳定的”(如果我错了,请纠正我)。

我的问题是,当我对它进行排序时,列变得不一致。如果它是升序,大写字母将首先出现在第一行是Ashton Cox然后是ashton cox的意义上。如果是下降,最后一行是阿什顿考克斯,那么最后一排是阿什顿考克斯。

因此,如何编写自定义排序,使得最后一行首先为大写,以便降序,如果它是相同的单词但是大写。

E.g. for ascending:
Ashton Cox
ashton cox,
Colleen Hurst
colleen Hurst

E.g. for descending: 
colleen hurst,
Colleen Hurst,
ashton cox
Ashton Cox

很抱歉,如果这一切听起来很复杂。这是一个令人困惑的问题,令人困惑的要求。

1 个答案:

答案 0 :(得分:0)

让这个使用以下代码:

$.extend( $.fn.dataTableExt.oSort, {
    "casetext-pre": function ( a ) {
      return a[0].toLowerCase()+a;
    },
    "casetext-asc": function ( a, b ) {
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },
    "casetext-desc": function ( a, b ) {
        return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    }
} );

$(document).ready( function () {
  var table = $('#example').DataTable({
        "aoColumns": [{
      "sType": "casetext"
    },null,null,null,null,null]
  });
} );

这将定义一个新的排序函数/类型,它将数据的第一个字符转换为小写,然后附加原始字符串数据。

请注意,必须在aoColums中设置数据类型。 (在这个例子中,我只关心具有特定类型的名称)。 null的数量应与您的列匹配。

这没有经过彻底的测试,但它应该给你提示如何继续。

以下是您修改后的example