JQuery 数据表交换行

JQuery DataTables Swapping Rows

本文关键字:换行 交换 数据表 JQuery      更新时间:2023-09-26

>我创建了一个函数来交换表中的行,但它似乎无法正常工作。行的数据似乎与数组中的数据不匹配。谁能帮助指出我的代码中的错误,或者我如何滥用某些 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,那么它就会超出界限。

我不确定是否理解了你的问题...

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

http://jsfiddle.net/q0zb1rkc/

。在您的函数中,您永远不会使用新的(编辑的)数据draw表:

我更改了脚本的这 2 行:

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

我补充.draw()

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

宽度也.draw() DOM 的变化以及 ROW1 和 ROW2 的交换。

从Frogmouth的回答中,

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

我添加了一些更改。

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

要解决此问题,

  1. 检查您的"订购"选项设置为"假"。
  2. 不要调用 draw() 函数两次。 在最后一条语句调用一次就足够了。

附言嗯,看来我不能直接在帖子中制作jsfiddle链接。 :(

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

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