0

http://datatables.net/plug-ins/sortingにあるENUM並べ替えルーチンを使用しています。同じ関数を再利用して、DataTablesプラグインの外部で別のリストを並べ替えたいと思います(基本的には、DataTableと同じページのSELECT要素を並べ替えます)。ソート機能の機能をコピーアンドペースト(および2セットのビジネスルールを維持)する必要がないようにしたいと思います。

たとえば、これが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>
4

1 に答える 1

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);

デモ

于 2012-09-19T18:55:41.603 に答える