hide empty columns (ajax data)
hide empty columns (ajax data)
with a datatables instance populated by ajax, how can i detect columns without data?
i want to hide those columns ...
the hiding part is not the problem;
table.column(columnIndex).visible(false); // table is a DT instance
how do i determine which column (i.e. columnIndex) does not have data, and especially after the ajax loaded the data?
what i currently have is this:
table.columns().flatten().each( function ( colIdx ) {
var columnData = table{{loop.index}}.columns(colIdx).data()
if (columnData.length < 1) {
table.column(colIdx).visible(false);
}
});
which does not work, i suspect because the data is not loaded at this point ...
currently i use an object to define the ajax, should i change this to a function and use the callback directly?
i searched this forum and google as well, but couldn't get all this stuff clear in my head, so any help that gets me back on track is appreciated, thanks.
This question has an accepted answers - jump to answer
Answers
I think your solution is fairly close, but
data()
will return an array item for each row in the table, which might include empty strings - so the count will always be >0 if you have any rows.What you could do is use
join()
to create a string based on the data and then check its length. If 0 then there is no data in the table!The other option would be to use
cells()
with a function for a selector for the row selector which would give a list of rows which don't have any data - but I suspect the above might be just as efficient if not more so.Regards,
Allan
thanks Allan
for completeness: putting the code in "initComplete": function(settings, json){ .... } helped too ;)
For others: please note that "table{{loop.index}}" needs to be just "table". Where table is a DataTables instance.
I was careless cleaning the code for this example, the loop index is Python Jinja template code, because i have several DataTables instances in one html