排序外掛程式開發
DataTables 內建支援正確排序表格中顯示的最常見資料類型,但有時您會發現資料的排序方式並不如預期。一種選擇是使用正交資料,以便 DataTables 理解的資料用於排序(例如,日期可以使用整數時間戳記而非格式化的字串)。另一種選擇是使用排序外掛程式。
排序外掛程式為 DataTables 提供排序任何任意資料類型所需的程式碼。例如,您可能會擁有帶有後綴運算子(MB、KB 等)的檔案大小,或是您想要以特定方式排序的選項的列舉。
DataTables 用於特定資料欄的排序函式是透過使用columns.type
選項來定義的。預設會自動偵測(也可以編寫類型偵測外掛程式),但您可以手動指定要使用哪個資料類型來使用您的外掛程式。
外掛程式是透過將排序函式附加到 DataTable.ext.type.order
物件來定義的。可以指定三個函式
{type}-pre
- 預先格式化方法。用於將格式化的資料轉換為可排序的資料{type}-asc
- 遞增排序方法{type}-desc
- 遞減排序方法
預先格式化
通常您只需要定義一個 -pre
方法。此函式會在實際排序發生之前針對每個要排序的資料點執行,允許將資料格式化為可以使用 JavaScript 內建的 Array.prototype.sort()
排序的資料。它接受一個參數(資料),而傳回值應該是取消格式化的資料。
例如,考慮以下情況
DataTable.ext.type.order['file-size-pre'] = function ( data ) {
var units = data.replace( /[\d\.]/g, '' ).toLowerCase();
var multiplier = 1;
if ( units === 'kb' ) {
multiplier = 1000;
}
else if ( units === 'mb' ) {
multiplier = 1000000;
}
else if ( units === 'gb' ) {
multiplier = 1000000000;
}
return parseFloat( data ) * multiplier;
};
當columns.type
選項設定為 file-size
時,諸如「11GB、200KB 等」之類的資料現在將會正確排序。
自訂遞增/遞減方法
如果您希望為遞增和遞減函式提供自訂的排序方法,它們的形式與 Array.prototype.sort()
的陣列比較函式完全相同。
請注意,在 DataTables 1.10 中,預先格式化器無法與自訂 -asc
和 -desc
方法一起使用 - 要使用自訂排序函式,您無法套用預先格式化器。此限制將在下一個 DataTables 主要版本中解決。
例如,您可能會擁有
function format ( a ) {
var units = data.replace( /[\d\.]/g, '' ).toLowerCase();
var multiplier = 1;
if ( units === 'kb' ) {
multiplier = 1000;
}
else if ( units === 'mb' ) {
multiplier = 1000000;
}
else if ( units === 'gb' ) {
multiplier = 1000000000;
}
return parseFloat( data ) * multiplier;
}
$.extend( DataTable.ext.type.order, {
"file-size-asc": function ( a, b ) {
a = format( a );
b = format( b );
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"file-size-desc": function ( a, b ) {
a = format( a );
b = format( b );
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
現有的外掛程式
您可能會發現其他 DataTables 使用者已經建立了符合您需求的外掛程式。外掛程式會在此網站上發佈,也可以在 DataTables CDN 上取得。
發佈您的外掛程式
如果您為 DataTables 建立了排序外掛程式,請告訴我們!。其他人可能會受益於您的外掛程式,而我(以及整個社群)將會非常感謝您的貢獻。