数据表:你可以在事件监听器中使用each()吗?

时间:2017-01-26 18:36:19

标签: javascript jquery datatables

我有一个数据表,我需要做两件事:

  • 汇总一栏中的所有数字。
  • 查明另一列中的单元格是否具有特定值,如果是,则将其清空。 (原因:MySQL表的默认日期为" 1970-01-01"如果您没有插入日期。我想替换所有" 1970-01-01& #34;空单元格的实例)。

为此,我将事件监听器附加到draw事件,然后:

  • For 1)我使用了sum()Datatables插件。
  • 2),我按照这个答案:Find and replace cells value with Datatables plugin,并使用了每个()。

    var tabla=$('#list').DataTable();
    tabla.on('draw.dt', function() {
            var bla=tabla.column(10).data().sum();
            tabla.column(9).nodes.each(function(node, index, dt) {
                var ble=tabla.cell(node).data();
                if (/^1970-01-01/.test(ble)) {
                    table.cell(node).data('');
                    }
                });
            });
    

问题在于,当我执行此操作时,我得到一个" tabla.column(...)。nodes.each不是函数" 。搜索周围,我发现这个错误是在jQuery或数据包尚未初始化的大部分时间引起的...但在我的情况下,它们肯定是,因为第一件事(sum()确实完成了;换句话说," bla"变量确实得到了计算。

这让我想知道你是否可以在事件触发器中使用each();否则,是什么导致了这个?

1 个答案:

答案 0 :(得分:1)

您可以使用$.each函数迭代任意集合

但是,虽然我不确定您对该列总和的意图是什么,但我建议您为每个相关列使用render选项。

例如,在日期列的情况下,您可以使用这样的渲染函数:

render: function (data,type,fullRow){
    if(data === '1970-01-01') {
        return null;
    }
    else {
        return data;
    }
}

(免责声明:未经测试!)

每次Datatables重绘表时都会调用drawCallback函数(以及draw事件):初始加载,过滤,排序,添加新行等等。这可能有一些无法预料附带效应,或仅仅是对绩效的影响。 希望它能帮到你!