试图解决这个问题一段时间:
在我的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;在删除第一个检测到的行后得到任何输出,但上面有错误。
答案 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/ 强>