2011-10-03 190 views
5

我使用的是来自http://datatables.net的DataTables插件。
它自己的插件是非常有用的,但我有一个很大的问题。jQuery - 数据表插件 - 排序问题

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

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开头的所有号码。

有没有人对这个插件有一些看法?

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

任何建议非常感谢。

回答

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”上的元素数量必须等于表中的列数,否则你会得到一个错误。空值表示数据表插件应该使用该列的默认排序方法。

+0

我必须指定每一列,我有作为空该类型 - 或我可以使用这个:'“aoColumns”:[{“sSortDataType”:“natural”}]' - 因为我的自然排序将只在第一列中需要? – Iladarsda

+0

我认为你可以逃避只为你的第一列定义特殊排序,并为其余列忽略'null'。 – WTK

+0

我无法让它工作。 'http:// jsfiddle.net/MrTest/zhx32/4 /' - 请你看一下,看看我做错了什么? – Iladarsda

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 
     ]