DataTables 循环遍历表并删除特定列中包含特定字符串的所有行
Posted
技术标签:
【中文标题】DataTables 循环遍历表并删除特定列中包含特定字符串的所有行【英文标题】:DataTables loop through the table and delete all rows that contain certain string in certain column 【发布时间】:2018-01-29 21:06:23 【问题描述】:一直在尝试解决这个问题:
在我的 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);用 this.remove().draw(false);并且它只删除它检测到的第一行会出现完全相同的错误。
后台发生了什么以及如何解决这个问题?在我看来,删除一行后,数据表中的所有数据都不再存在(索引 6 下的列未定义),当我尝试对检测到的每一行进行 console.log(this) 时,我不删除检测到的第一行后得到任何输出,但上面有错误。
【问题讨论】:
【参考方案1】:在循环中按索引删除数组项是不好的做法。删除一项后,所有索引都可能已更改。最好选择要删除的行 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/
【讨论】:
简单而精彩!我从没想过一旦删除了一行,索引就会改变。谢谢你,先生,你是个天才。 为什么我尝试实现这个方法时,rowIdx、tableLoop、rowLoop都是UNDEFINED? @paparush,没有代码就无法判断。但请注意,every
最初是在 1.10.6 中引入的,并且从那以后一直在发展。您可能使用的是旧版本。以上是关于DataTables 循环遍历表并删除特定列中包含特定字符串的所有行的主要内容,如果未能解决你的问题,请参考以下文章
当整个列中包含带有下拉列表的单元格时,如何应用搜索(jQuery DataTables)? [关闭]