2012-09-19 49 views
0

我使用ENUM排序例程在http://datatables.net/plug-ins/sorting找到。我想重用相同的函數來排序DataTables插件之外的另一個列表(基本上在DataTable的同一頁面上對SELECT元素進行排序)。我想避免必須複製並粘貼(並維護兩套業務規則)排序函數的功能。從JQuery DataTables重用排序功能

例如,如果這是在「插件」我使用的數據表:

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "status-enum-pre": function (a) { 
    switch (a) { 
     case "Assigned": return 1; 
     case "Contacted": return 2; 
     case "Meeting Set": return 3; 
     case "Closed": return 4; 
     default: return 5; 
    } 
    }, 

    "status-enum-asc": function (a, b) { 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 

    "status-enum-desc": function (a, b) { 
    return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

我怎樣才能重新使用,其功能是排序如下選擇列表?

<select> 
    <option value="Contacted">Contacted</option> 
    <option value="Assigned">Assigned</option> 
    <option value="Closed">Closed</option> 
    <option value="Meeting Set">Meeting Set</option> 
</select> 

回答

1

獲取從jQuery.fn.dataTableExt.oSort屬性所需的排序函數,然後將其傳遞給Array#sort,它接收一個比較器功能。例如,要排序select使用status-enum-asc,你需要:

// Plugin sort functions 
var sortFn = jQuery.fn.dataTableExt.oSort["status-enum-pre"]; 
var sortDirFn = jQuery.fn.dataTableExt.oSort["status-enum-desc"]; 

// Sort 
var options = $("select option"); 
options.sort(function(a,b) { 
    return sortDirFn(sortFn(a.text), sortFn(b.text)); 
}); 

// Empty and append sorted options 
$("select").empty().append(options); 

DEMO

+0

你好!謝謝你,若昂席爾瓦。對此,我真的非常感激! – bigmac

+0

@bmccleary:非常歡迎,很高興我可以幫助一個DataTables用戶:-) –