自定义数据表排序

时间:2013-09-17 23:14:48

标签: javascript jquery datatables

我有一个按等级排序的数据表,可以通过输入框输入。

等级是1到9的单个数字,或者可以是空白。我希望每当我排序时,空格总是出现在列表的末尾。

请参阅JSFiddle示例:http://jsfiddle.net/afEHc/

如果我使用:

"aoColumns": [ { "sSortDataType": "dom-text" }, null ]

它可以获取新值,但顺序不正确。这就是空白需要始终出现在最后。

如果我使用:

"aoColumns": [{"sType": "data-rank"}, null ]

它最初工作正常,但是当我先按另一列排序或将值添加到排名列时,它会中断。

任何意见或建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

是的,不幸的是,你不能拥有$.fn.dataTableExt.afnSortData['data-rank'],至少我所知道的。

但您可以尝试使用dom-text,并将sType设置为data-rank

"aoColumns": [
   { "sSortDataType": "dom-text", "sType": "data-rank" },
    null
]

新的自定义排序功能:

jQuery.extend( jQuery.fn.dataTableExt.oSort, { 
    "data-rank-asc": function ( a, b ) {
        a = (a==='') ? 99 : a; b = (b==='') ? 99 : b;    
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },
    "data-rank-desc": function ( a, b ) {
        a = (a==='') ? -1 : a; b = (b==='') ? -1 : b;    
        return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    }
});

现在它有效!空白始终显示在结尾,包括升序和降序,以及输入字段中输入新值。

分叉小提琴:http://jsfiddle.net/s29aB/

澄清自定义排序:我只是设置空白/“” - 排序升序为-1,排序降序为99.