从JQuery DataTables重用排序函数

时间:2012-09-19 18:24:36

标签: jquery datatables

我正在http://datatables.net/plug-ins/sorting使用ENUM排序程序。我想重用相同的函数来排序DataTables插件之外的另一个列表(基本上在与DataTable相同的页面上排序SELECT元素)。我想避免复制和粘贴(并维护两组业务规则)sort函数的功能。

例如,如果这是我用于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 个答案:

答案 0 :(得分:1)

jQuery.fn.dataTableExt.oSort属性获取所需的排序函数,然后将其传递给Array#sort,它接收比较器函数。例如,要使用selectstatus-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