JS DataTables ColReorder API Reorder Bug?

JS DataTables ColReorder API Reorder Bug?

本文关键字:Bug Reorder API DataTables ColReorder JS      更新时间:2023-09-26

JS DataTables ColReorder 在使用 API 对列重新排序时会导致意外行为。https://github.com/DataTables/ColReorder/

第一次重新订购工作正常,例如tableColReorder.fnOrder([2, 1, 0]);

但是这种后续的重新排序应该将列返回到其原始顺序,但事实并非如此。 为什么不呢?tableColReorder.fnOrder([0, 1, 2]);

简单的小提琴示例在这里:http://jsfiddle.net/h7wdt72k/

$(document).ready(function () {
    // Initialize data table extension.
    var table = $('table')
      .DataTable({
        paging: false,
        searching: false,
        ordering: false,
        bInfo: false
    });
    // Initialize column re-order extension.
    tableColReorder = new $.fn.dataTable.ColReorder(table);
    // Re-order columns.  Switch first/last columns.
    tableColReorder.fnOrder([2, 1, 0]);
    // Re-order columns to original order 0, 1, 2.  Does not work!?
    tableColReorder.fnOrder([0, 1, 2]);
    // Get current column order. Did not apply re-order directly above.  Why not!?
    alert(tableColReorder.fnOrder());
    // This statement returns columns to original order 1, 2, 3.  Works but why!?
    //tableColReorder.fnOrder([2, 1, 0]);   
});

.html:

<table border="1">
  <thead>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    </tr>
  </tbody>
</table>

行为是设计使然,而不是错误。

//To switch position of two columns, always reorder based on array of consecutive integers (array length = number of columns).
//Even if columns already moved. Start with array of consecutive integers.
newColOrder = [0,1,2];
// Set new order of columns.
newColOrder[colTo] = colFrom; // colFrom = index to move column from.
newColOrder[colFrom] = colTo; // colTo = index to move column to.
e.g. to switch first and last column.
newColOrder[0] = 2;
newColOrder[2] = 0;
// [2,1,0];
// Reorder columns. Switch position of first and last column.
tableColReorder.fnOrder(newColOrder);
// Switch position of first and last column again.  Returns columns to original position.
tableColReorder.fnOrder(newColOrder);