如何隐藏包含该列中所有空单元格(包括标题<th>
)的列,同时保留其他列及其标题不变。以下jquery隐藏了整个<th>
,这不是我想要的。 Here是一个示例,我只想隐藏整个'Column3',包括<th>
。非常感谢提前。
$('table#mytable tr').each(function() {
if ($(this).children('td:empty').length === $(this).children('td').length) {
$(this).hide();
}
});
答案 0 :(得分:15)
花了一段时间拼凑起来。感谢nxt的一些代码。
$('#mytable th').each(function(i) {
var remove = 0;
var tds = $(this).parents('table').find('tr td:nth-child(' + (i + 1) + ')')
tds.each(function(j) { if (this.innerHTML == '') remove++; });
if (remove == ($('#mytable tr').length - 1)) {
$(this).hide();
tds.hide();
}
});
答案 1 :(得分:6)
如果要隐藏列,如果所有单元格(忽略标题)都为空,您可以执行以下操作:
$('#mytable tr th').each(function(i) {
//select all tds in this column
var tds = $(this).parents('table')
.find('tr td:nth-child(' + (i + 1) + ')');
//check if all the cells in this column are empty
if(tds.length == tds.filter(':empty').length) {
//hide header
$(this).hide();
//hide cells
tds.hide();
}
});
示例2(适用于jQuery&gt; 1.7):http://jsfiddle.net/mkginfo/mhgtmc05/
答案 2 :(得分:3)
http://jsfiddle.net/nlovatt/JsLn8/
一个多表示例,它避免在选择器中使用表id
答案 3 :(得分:3)
这里没有一个解决方案适合我。这就是我用来隐藏标题中有或没有文字的空列:
$('table').each(function(a, tbl) {
var currentTableRows = $(tbl).find('tbody tr').length;
$(tbl).find('th').each(function(i) {
var remove = 0;
var currentTable = $(this).parents('table');
var tds = currentTable.find('tr td:nth-child(' + (i + 1) + ')');
tds.each(function(j) { if ($(this).text().trim() === '') remove++; });
if (remove == currentTableRows) {
$(this).hide();
tds.hide();
}
});
});
答案 4 :(得分:1)
您需要下一个代码:
HTML
<table id="mytable" border="1">
<thead>
<tr><th>Column1</th><th>Column2</th><th>Column3</th><th>Column4</th></tr>
</thead>
<tbody>
<tr class="data"><td>1st</td><td>1.1</td><td></td><td>1</td></tr>
<tr class="data"><td>2nd</td><td>2.01</td><td></td><td>2</td></tr>
<tr class="data"><td>3rd</td><td>3.001</td><td></td><td>3</td></tr>
<tr class="data"><td>4th</td><td>4.01</td><td></td><td>4</td></tr>
</tbody>
</table>
的JavaScript
var $table = $('#mytable');
var thead = $table[0].tHead, tbody = $table[0].tBodies[0];
var colsLen = tbody.rows[0].cells.length, rowsLen = tbody.rows.length;
var hideNode = function(node) { if (node) node.style.display = "none"; };
for (var j = 0; j < colsLen; ++j) {
var counter = 0;
for (var i = 0; i < rowsLen; ++i) {
if (tbody.rows[i].cells[j].childNodes.length == 0) ++counter;
}
if (counter == rowsLen) {
for (var i = 0; i < rowsLen; ++i) {
hideNode(tbody.rows[i].cells[j]);
}
hideNode(thead.rows[0].cells[j]);
}
}
答案 5 :(得分:0)
如果表数据来自MySQL查询,则可以通过对字段使用count来验证列是否为空(count = 0表示没有值)。
当你有很多字段时,这是相当挑剔的,并且相应的页眉和页脚单元也需要IF条件。但它有效......
if ($sum_field>'0') echo "<th>field</th>";
if ($sum_field>'0') echo "<td>" . $row['field'] . "</td>";
@nmat解决方案工作正常但不处理页脚。