我使用的是来自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
]