jQuery - datatable插件 - 排序问题

时间:2011-10-03 08:43:10

标签: jquery datatables

我正在使用http://datatables.net中的DataTables插件 它自己的插件是非常有用的,但我有一个很大的问题。

以下列格式返回某些搜索的地址列表。

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

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

你们中有人对这个插件有所了解吗?

  • 知道解决这个排序问题吗?
  • 或者知道在第一次启动时禁用排序的方法(显示数据来自db)?

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:4)

要解决此特定问题,您可以对数据表使用自然排序插件。在http://datatables.net/plug-ins/sorting阅读所有相关内容(搜索“自然排序”)。

简而言之,提供you've downloaded和嵌入式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" }
]
});

这是工作小提琴http://jsfiddle.net/zhx32/14/

注意:事实上,“aoColumns”中的元素数量似乎必须等于表中的列数,否则您将收到错误。空值表示datatables插件应该对该列使用默认排序方法。

答案 1 :(得分:3)

你应该使用sorting plugin这样的东西:

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));
};

然后在aoColumns中指定该类型

        "aoColumns": [
            null,
            null,
            null,
            { "sType": "num-html" },
            null
        ]