2012-09-19 1 views
0

Я использую процедуру сортировки ENUM, найденную по адресу http://datatables.net/plug-ins/sorting. Я хотел бы повторно использовать эту же функцию для сортировки другого списка за пределами подключаемого модуля DataTables (в основном сортировка элемента SELECT на той же странице, что и DataTable). Я хочу избежать необходимости копировать и вставлять (и поддерживать два набора бизнес-правил) функции функции сортировки.Функция повторного использования сортировки из JQuery DataTables

Например, если это является «плагин» Я использую для 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-user :-) –