我正在使用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
开头的所有数字。
你们中有人对这个插件有所了解吗?
任何建议都非常感谢。
答案 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
]