You want to use COLGROUP for this, otherwise you need to apply a style to each cell in each row, which will be terribly inefficient and most likely will hang the browser, especially if your grid is large. All of the above answers that rely on a third-party library (jQuery) do this in a slow / lazy way. Since all Javascript is client-side, you probably want to pay a little more attention when it comes to efficiency.
Here you go ...
function hideColumns(tableId, colIndexArray) {
var tbl = document.getElementById(tableId);
if(!tbl) return;
var rows = tbl.getElementsByTagName("TBODY");
if(rows.length == 0)
rows = tbl.getElementsByTagName("TR");
else
rows = rows[0].getElementsByTagName("TR");
var cols = rows[rows.length - 1].getElementsByTagName("TD");
var colgroup = document.createElement("COLGROUP");
for(var i = 0, l = cols.length; i < l; i++) {
var col = document.createElement("COL");
for(var num in colIndexArray) {
if(colIndexArray[num] == i) {
if(document.all)
col.style.display = 'none'
else
col.style.visibility = 'collapse';
break;
}
}
colgroup.appendChild(col);
}
tbl.insertBefore(colgroup, tbl.childNodes[0]);
}
Use it like this:
var columnsToHide = [0, 1, 2];
var tableId = "tableIdHere";
hideColumns(tableId, columnsToHide);
Tested in IE7 and FF3: Hide Table Columns with Javascript
source
share