数据表 - rows()。data()。each()函数不起作用

时间:2018-05-12 03:30:40

标签: javascript java jquery datatable datatables

我试图在创建表之后遍历行,然后从第一个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()函数似乎不起作用。 Whyyyyy?

表的完整代码:

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 个答案:

答案 0 :(得分:1)

因为您是通过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");
}

更新了jsfiddle:https://jsfiddle.net/s048cw6w/