【问题标题】:DataTables loop through the table and delete all rows that contain certain string in certain columnDataTables 循环遍历表并删除特定列中包含特定字符串的所有行
【发布时间】: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) 时,我不删除检测到的第一行后得到任何输出,但上面有错误。

【问题讨论】:

    标签: javascript jquery datatable datatables


    【解决方案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 中引入的,并且从那以后一直在发展。您可能使用的是旧版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多