【问题标题】:jQuery - datatable plugin - sorting issuejQuery - 数据表插件 - 排序问题
【发布时间】:2011-10-03 08:43:09
【问题描述】:

我正在使用来自 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 的数据)?

非常感谢任何建议。

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    要解决这个特定问题,您可以使用数据表的自然排序插件。在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”上的元素数似乎必须等于表中的列数,否则会出错。空值表示数据表插件应该对该列使用默认排序方法。

    【讨论】:

    • 我是否必须将我拥有的每一列都指定为空 - 或者我可以使用这个:"aoColumns": [ { "sSortDataType": "natural" } ] - 因为我的自然排序只需要在第一列中?
    • 我认为您可以只为第一列定义特殊排序并跳过其余列的 null
    • 我无法让它工作。 http://jsfiddle.net/MrTest/zhx32/4/ - 你能看看我做错了什么吗?
    • 谢谢!看起来null 是必要的。
    【解决方案2】:

    您应该使用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
            ]
    

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2019-10-21
      相关资源
      最近更新 更多