DataTables遍历表并删除某些列中包含特定字符串的所有行

时间:2017-08-21 17:55:22

标签: javascript jquery datatable datatables

试图解决这个问题一段时间:

在我的DataTable中索引6下的列中,我在克罗地亚语中有一个布尔值 - > DA为1,NE为0.在某一点上,我想触发一个删除包含" DA"的所有行的过程。但是,在索引6下的列中,在执行以下过程之后:

function deleteSelectedDiscountedProducts() {
    tableSelectedProducts.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
        var currentData = this.data();
        if (currentData[6].indexOf("DA") >= 0) {
            tableSelectedProducts.row(rowIdx).remove().draw(false);
        } else {

        }
    } );
}

我只删除了一行(可能是检测到的第一行)以及控制台中的以下内容:

Uncaught TypeError: Cannot read property '6' of undefined

另外,我尝试切换tableSelectedProducts.row(rowIdx).remove()。draw(false); with this.remove()。draw(false);并且它只删除它检测到的第一行时完全相同的错误。

后台发生了什么以及如何解决这个问题?在我看来,在删除一行之后,数据表中的所有数据都不再存在(索引6下的列未定义),当我为检测到的每一行尝试console.log(this)时,我不知道#39;在删除第一个检测到的行后得到任何输出,但上面有错误。

1 个答案:

答案 0 :(得分:5)

在循环中通过索引删除数组项是不好的做法。删除一个项目后,所有索引都可能已更改。最好选择要删除的行dom nodes的列表,然后删除它们。这是一个例子:

$('#delete').on('click', function() {
  var nodes = [];
  table.rows().every(function(rowIdx, tableLoop, rowLoop) {
    if (this.data()[3] == 'Edinburgh') nodes.push(this.node())
  })
  nodes.forEach(function(node) {
    table.row(node).remove().draw()
  })
})

演示 - >的 http://jsfiddle.net/LqzLzxon/