排序外掛程式開發

DataTables 內建支援正確排序表格中顯示的最常見資料類型,但有時您會發現資料的排序方式並不如預期。一種選擇是使用正交資料,以便 DataTables 理解的資料用於排序(例如,日期可以使用整數時間戳記而非格式化的字串)。另一種選擇是使用排序外掛程式。

排序外掛程式為 DataTables 提供排序任何任意資料類型所需的程式碼。例如,您可能會擁有帶有後綴運算子(MBKB 等)的檔案大小,或是您想要以特定方式排序的選項的列舉

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 建立了排序外掛程式,請告訴我們!。其他人可能會受益於您的外掛程式,而我(以及整個社群)將會非常感謝您的貢獻。