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

Ale*_*nic 4 javascript datatable jquery 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 {

        }
    } );
}
Run Code Online (Sandbox Code Playgroud)

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

Uncaught TypeError: Cannot read property '6' of undefined
Run Code Online (Sandbox Code Playgroud)

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

背景中发生了什么以及如何解决这个问题?这在我看来,(下指数6未定义列)从数据表中删除一个行的所有数据不存在了以后,当我试图CONSOLE.LOG(这)对每个检测到的行,我不删除第一个检测到的行后获取任何输出,但上面有错误.

dav*_*rad 6

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

$('#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()
  })
})
Run Code Online (Sandbox Code Playgroud)

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