我试图在创建表之后遍历行,然后从第一个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");
}
});
答案 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/