2011-10-03 189 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 
     ]