代码之家  ›  专栏  ›  技术社区  ›  SimplyKz

Datatable-rows()。数据()。each()函数不工作

  •  2
  • SimplyKz  · 技术社区  · 6 年前

    我试图在创建表后遍历这些行,然后从第一个td中删除没有任何子详细信息的行的css类,代码如下:

    oTable.rows().data().each(function(value, index, id){
        alert('hmm');
        var node = oTable.row(index).node();
    
        if(value.container_cnt === 0){
        alert('hi');
    
        $(node).find("td.childShow:before").removeClass("td.childShow:before");
        }
    });
    

    但是,each()函数似乎不起作用。为什么?

    表格的完整代码:

    function(data) {
        var oTable = $('#childInfoTable').DataTable( {  
        ajax: 'childData',
        "dom": 'rt',
        select:"single",
        "columns": [
                    {
                    "className": 'childShow',
                    "orderable":  false,
                    "defaultContent": '',
                    width:"15px"
                    },
                 { "data": "id" },
                 { "data": "name" },
                 ],
                 "order": [[1, 'asc']]
                });
    
        oTable.rows().data().each(function(value, index, id){
            alert('hmm');
            var node = oTable.row(index).node();
    
            if(value.container_cnt === 0){
                alert('hi');
                $(node).find("td.childShow:before").removeClass("td.childShow:before");
            }
        });
    

    https://jsfiddle.net/nnb97rh9/700/

    1 回复  |  直到 6 年前
        1
  •  3
  •   Eliellel    6 年前

    因为您是通过Ajax加载数据,所以 table.rows().data().each() 方法调用时,尚未加载数据,因此不会调用循环中的任何内容。一个简单的修复方法是将代码放在draw事件的回调中。因此,每次加载数据后,代码都会运行。

    table.on('draw', function(){
      table.rows().data().each(function(value, index){
      alert('why it not coming in?');
      var node = table.row(index).node();
    
      if(value.container_cnt === 0){
      alert('hi');
    
      $(node).find("td.details-control").removeClass("td.details-control");
    }
    

    更新的JSFIDLE: https://jsfiddle.net/s048cw6w/