jQuery - datatable插件-排序问题



我使用的是来自http://datatables.net的数据表插件。
这个插件本身是非常有用的,但我有一个大问题与它。

返回一些搜索的地址列表,格式如下:

1 Main Street
12 Main Street
13 Main Street
14 Main Street
...
2 Main Street
3 Main Street
4 Main Street
5  Main Street
..

正如您所看到的,排序不是我所期望的。将返回2之前以1 eg, 11, 111, 1111开头的所有数字。

你们中有人使用过这个插件吗?

  • 知道如何解决这个排序问题吗?
  • 或者知道如何在第一次启动时禁用排序(显示数据,因为它来自数据库)?

要解决这个问题,您可以使用数据表的自然排序插件。请访问http://datatables.net/plug-ins/sorting(搜索"自然排序")阅读所有相关内容。

简而言之,只要你下载并嵌入了naturalSort函数,你就可以像这样为数据表定义排序句柄:

jQuery.fn.dataTableExt.oSort['natural-asc']  = function(a,b) {
    return naturalSort(a,b);
};
jQuery.fn.dataTableExt.oSort['natural-desc'] = function(a,b) {
    return naturalSort(a,b) * -1;
};

您还需要为列指定sSortDataType参数,以告诉它使用哪个插件函数(在下面的示例中,我将表的第三列的排序设置为自然排序):

$('#example').dataTable( {
    "aoColumns": [
        null,
        null,
        { "sType": "natural" }
]
});

Here's working fiddle http://jsfiddle.net/zhx32/14/

注意:似乎你,事实上,"aoccolumns"上的元素数量必须等于表中的列数,否则你会得到一个错误。

你应该使用这样的排序插件:

jQuery.fn.dataTableExt.oSort['num-html-asc']  = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};
jQuery.fn.dataTableExt.oSort['num-html-desc'] = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

,然后在aoccolumns

中指定该类型
        "aoColumns": [
            null,
            null,
            null,
            { "sType": "num-html" },
            null
        ]

最新更新