【问题标题】:Reuse Sorting Function from JQuery DataTables重用来自 JQuery DataTables 的排序函数
【发布时间】:2012-09-19 18:24:36
【问题描述】:

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

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

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    jQuery.fn.dataTableExt.oSort属性中获取需要的排序函数,然后传递给Array#sort,后者接收一个比较器函数。例如,要使用status-enum-ascselect 进行排序,您需要:

    // 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.

    【讨论】:

    • 你摇滚!谢谢若昂席尔瓦。我真的很感激!
    • @bmccleary:不客气,很高兴我能帮助 DataTables 用户 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2013-09-14
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多