JQuery DataTables交换行

时间:2015-01-19 13:32:54

标签: javascript jquery datatables

我创建了一个交换表中行的函数,但它似乎没有正常工作。行的数据似乎与数组中的数据不匹配。任何人都可以帮助指出我的代码中的错误,或者我如何滥用某些DataTable函数?

function swapDataTableRows(selector, row1Index, row2Index)
{
    var datatable = selector.DataTable();
    var rows = datatable.rows().data();
    var row1Data = datatable.row(row1Index).data();
    var row2Data = datatable.row(row2Index).data();

    datatable.row(row1Index).data(row2Data);
    datatable.row(row2Index).data(row1Data);
}

swapDataTableRows(table,2,3) - 它将交换第1行和第2行。如果我向索引添加1,那么它就越界了。

3 个答案:

答案 0 :(得分:1)

我确定不明白你的问题......

我尝试创建一个简单的演示来理解:

http://jsfiddle.net/q0zb1rkc/

...在您的函数中,您永远不会draw带有新(已编辑)数据的表:

我更改了这两行脚本:

datatable.row(row1Index).data(row2Data);
datatable.row(row2Index).data(row1Data);

然后我添加.draw()

datatable.row(row1Index).data(row2Data);
datatable.row(row2Index).data(row1Data);

width .draw()也改变DOM,ROW1和ROW2交换。

答案 1 :(得分:0)

来自Frogmouth的回答,

`http://jsfiddle.net/bobxdr7c/`

我添加了一些更改。

由于在实例化Datatable时将排序选项设置为true, 每当你尝试交换他们的数据并重新绘制它时,它看起来都不是你所期望的。

要解决此问题,

  1. 检查您的订购'选项设置' false'。
  2. 不要两次调用draw()函数。它足以在最后一次声明中拨打一次。
  3. P.S。嗯,似乎我不能直接在帖子中创建一个jsfiddle链接。 :(

答案 2 :(得分:0)

如果这不是第一次切换行,您很可能使用了错误的行索引。 DOM 中显示的索引不一定是该行在 api 中的索引。 您是否尝试过使用特定选择器(例如其 id)来处理行? 例如:datatable.row("#row1id")

对于要在 DOM 中更新的更改,您还需要在所有数据切换完成后调用 datatable.draw()