2016-12-14 77 views
0

我以相當標準的方式使用DataTables插件。這是ready事件內容:當「無數據」存在時,對行進行不同的排序

jQuery('#languages_table').DataTable({ 
    pageLength: 100, 
    columns: [ 
     { orderDataType: "dom-text" }, 
     { orderDataType: "dom-text" }, 
     { orderDataType: "dom-text" }, 
     { orderDataType: "dom-text", type: "num" }, 
     { orderable: false }, 
     { orderable: false } 
    ] 
    }); 

然而,在某些情況下,細胞沒有資料,所以我需要顯示類似沒有數據

這顯然與排序系統(特別是數字列)混亂,排序他們在不需要的地方。

我已經設法通過將電池完全耗盡擺脫這個問題,爲數字(所以沒有寫沒有數據在所有),並加入由CSS文本:

#languages_table td:empty::before { 
    content: "no data"; 
} 

這樣單元格計數爲零,下降搜索,它們出現在最底部(因爲以這種方式排序數字更有用)。

這很糟糕(並且翻譯很痛苦),但它確實有效。

我現在需要相同的文本單元格,但在這種情況下,排序應該將空單元格放在上升搜索的底部(在這種情況下更有趣),我當然不知道如何要做到這一點。

有沒有辦法手動處理這些邊緣情況?

回答

0

您需要自定義排序功能。您可以將其範圍限定爲您定義的自定義類型。

$.extend($.fn.dataTableExt.oSort, { 
    "null-last-pre": function (a) { 
     // Preprocess data if you need to. Currently doing nothing 
     return a; 
    }, 

    "null-last-asc": function(a, b) { 
     return (a===null)-(b===null) || +(a>b)||-(a<b); 
    }, 

    "null-last-desc": function(a,b) { 
     return (a===null)-(b===null) || -(a>b)||+(a<b); 
    } 
}); 

然後在添加columnDefs到你的選擇是這樣的:從您的列定義,並且只要數據爲「null」或「:

columnDefs: [ 
    { type: 'null-last', targets: [0,1,2,3,4,5] } 
] 

同時刪除了「‘民’類型」未定義「,那麼它應該適當地分類。如果你需要'num'類型的類型轉換,那麼只需從目標數組中刪除'3'即可。不確定哪種類型優先(columnDef或列)。

相關問題