Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery-datatable插件-排序问题_Jquery_Datatables - Fatal编程技术网

jQuery-datatable插件-排序问题

jQuery-datatable插件-排序问题,jquery,datatables,Jquery,Datatables,我正在使用来自的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开头的数字,例如2之前的11、111、1111 你们中有人对这个插件有什么不满吗

我正在使用来自的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开头的数字,例如
2
之前的11、111、1111

你们中有人对这个插件有什么不满吗

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

非常感谢您的建议。

要解决这个问题,您可以使用datatables的自然排序插件。在(搜索“自然排序”)上阅读有关它的所有信息

简言之,提供并嵌入了
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;
};
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));
};
您还需要为列指定sSortDataType参数,告诉它要使用哪个插件函数(在下面的示例中,我将表的第三列的排序设置为natural):

这是工作小提琴

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

您应该为该列使用一个类似以下内容的方法:

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

我是否必须将我拥有的每一列都指定为null?或者我可以只使用以下内容:
“aoColumns”:[{“sSortDataType”:“natural”}]
-因为我的自然排序只需要在第一列中进行?我认为您可以不必为第一列定义特殊排序,而跳过其余列的
null
。我无法让它工作<代码>http://jsfiddle.net/MrTest/zhx32/4/-请看一看,告诉我我做错了什么?谢谢!看起来
null
是必需的。