簡體   English   中英

DataTables - 如何使用自定義條件對列進行排序?

[英]DataTables - How to order a column using custom condition?

在我的一個基於 PHP 的項目中,我需要使用自定義條件或自定義順序而不是DataTable 的默認順序(升序或降序)對進行排序。

我有四種狀態:緊急、高、中、低


我想要的自定義訂單是:

在上升期間它將是:低、中、高、緊急
在下降期間它將是:緊急、高、中、低


因此,在搜索DataTables 之后,我找到了一個在DataTables中可以正常工作的解決方案。 這是[稍微定制以滿足我的標准]:

$.fn.dataTable.ext.type.order['ticket-priority-pre'] = function ( d ) {
    switch ( d ) {
        case 'Low'      :   return 1;
        case 'Medium'   :   return 2;
        case 'High'     :   return 3;
        case 'Urgent'   :   return 4;
    }
    return 0;
};

$( document ).ready( function() {
    //initializing datatables
    $('#ticketList').DataTable({
        "paging"    :   false,
        "info"      :   false,
        "searching" :   false,
        "order": [[ 0, "desc" ]],
        "columnDefs": [ {
            "type": "ticket-priority",
            "targets": -1
        } ]
    });
});

但我得到的命令是:

升序:高、低、中、緊急
降序:緊急、中、低、高


由於某種未知原因, LowHigh的順序錯誤。

任何人都可以幫助我解決代碼中的問題或能夠提供解決方案嗎?

  • 謝謝

從下一個示例中讀取:

https://datatables.net/examples/plug-ins/sorting_auto.html

我認為,你需要這樣做:

$.fn.dataTable.ext.type.detect.unshift(
    function ( d ) {
        return (d === 'Low' || d === 'Medium' || d === 'High' || d === 'Urgent') ?
            'ticket-priority' :
            null;
    }
);

$.fn.dataTable.ext.type.order['ticket-priority-pre'] = function ( d ) {
    switch ( d ) {
        case 'Low'      :   return 1;
        case 'Medium'   :   return 2;
        case 'High'     :   return 3;
        case 'Urgent'   :   return 4;
    }
    return 0;
};

$( document ).ready( function()
{
    // Initializing datatables.

    $('#ticketList').DataTable({
        "paging"    :   false,
        "info"      :   false,
        "searching" :   false,
        "order"     : [[ 0, "desc" ]],
        "columnDefs": [ {
            "type": "ticket-priority",
            "targets": -1
        } ]
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM