2012-04-18 81 views
4

我想我知道這個問題,但我不知道如何正確處理它,所以我希望這裏有人有類似的問題,並設法解決它一些如何。我所擁有的是一個有幾列的表格,除了一個以外,所有這些表格都可以工作。以下是該列的屏幕截圖及其在工作中的分類。jquery datatables列沒有正確排序

enter image description here

,你可以看到它會按字母數字邏輯不排序。我的假設是,某些名稱中包含字符,例如逗號的括號,括號等。所以說,我將如何解決這個問題,所以我可以使用數據表插件來進行字母數字排序?思想的?

**** ****編輯

這是我一起工作的代碼,適用於一切,但此一列..

jQuery.fn.dataTableExt.oSort['num-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-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)); 
}; 

$(document).ready(function() { 
    $('#ledger').dataTable({ 
     bAutoWidth: false, 
     bJQueryUI : true, 
     bProcessing: true, 
     bServerSide: false, 
     sPaginationType: "full_numbers", 
     bStateSave : false, 
     bUseRendered: false, 
     iDisplayLength: ${entriesValue}, 
     sDom: mw.superadmin.datatable.relatedListDom, 
     aLengthMenu: mw.superadmin.datatable.relatedListLengthMenu, 
     aaSorting: [[0,'asc']], 
     aoColumns: [ 
      null, 
      { "iDataSort": 2}, 
      { "bVisible": false, "sType": "num"}, 
      { "iDataSort": 4, "bSortable": true }, 
      { "bVisible": false, "sType": "num"} 
     ] 
    }); 

回答

3

既然你顯示一個鏈接,我猜你正在使用自定義渲染功能?

如果是這樣的話,在你的列定義設置如下:

"bUseRendered": false 

這會讓對數據表進行排序,而不是渲染輸出。

+0

這並不有所作爲 – chris 2012-04-19 17:33:54

+0

你在列定義中使用它: 我通過通過「aTargets」和設置「S型」爲「空」禁用第一列固定呢?在你的例子中,它在數據表定義中,這是錯誤的地方。 – 2012-04-19 18:02:09

+0

不完全確定,不幸的是,對數據表做了很少的工作,直到這一點,它基本上被拋在我身上,用武力來處理它,我把我的代碼放在上面,如果這有助於任何東西代替什麼我做錯了 – chris 2012-04-19 18:30:49

3

我相信最好的方法是使用aoColumnDefs。試試這個:

"aoColumnDefs": [ 
    { 
    "sType": "string" 
    } 
] 


如果不工作,你可能需要創建一個自定義排序功能。見this link

+0

的特定情況,不幸的是沒有幫助 – chris 2012-04-19 17:33:33

+0

也許嘗試添加字符串的sType到aColumns中的第一列。使用{「sType」:「string」}而不是null。另外,您可能想查看[iDataSort](http://www.datatables.net/ref#iDataSort)的某些文檔,因爲您有隱藏的列用於排序。 – deusxmach1na 2012-04-19 18:48:03

+0

我沒有提到這似乎只是Chrome瀏覽器,FF,IE瀏覽器,Safari和Opera的問題都顯得很好。這是Chrome特有的 – chris 2012-04-19 23:08:15

0

如果您正在使用自定義的渲染方法,請使用「類型」的值參數區分實際數據與您的自定義視圖。像下面,

"render": function (data, type, full, meta) { 
    if (type === 'display') { 
     return '<a class="btn btn-link">' + full['description'] + '</a>';      
    } 
    return full['description']; 
} 

內部數據表將通過類型「顯示」,同時生成視圖和其他值時進行排序,搜索....等

0

在我的情況下,我的第一列包含圖像,我發現,排序該列正確排序第二列,但當我點擊對排序錯誤的第二列進行排序。

"aoColumnDefs": [ 
     { 'bSortable': true, 'sType':"null", 'aTargets': [1, 6] }, 
    ]