在HTML表格中,如果该行中的所有单元格(列)都为空,如何自动隐藏整行?
我认为我可以添加一些可以执行此操作的标记,但我似乎无法在任何地方找到解决方案。
答案 0 :(得分:1)
在HTML中,您可以使用hidden
属性,就像在<tr hidden>
中一样,但这是HTML5的新颖性,并且浏览器支持有限。但是,如果您可以直接更改HTML标记,隐藏元素的最佳方法是将其删除。
假设您想要某些东西仍然允许您在标记中有行,由于某种原因,那么您可以使用JavaScript,例如如下:
<script>
function emptyCellsOnly(row) {
var cells = row.cells;
for(var j = 0; j < cells.length; j++) {
if(cells[j].innerHTML !== '') {
return false;
}
}
return true;
}
var rows = document.getElementsByTagName('tr');
for(var i = 0; i < rows.length; i++) {
if(emptyCellsOnly(rows[i])) {
rows[i].style.display = 'none';
}
}
</script>
测试if(cells[j].innerHTML !== '')
检查单元格是否完全为空,如<td></td>
中所示。空格字符或换行符不计为空。如果它们应该是,请根据需要修改条件。
代码rows[i].style.display = 'none'
通过将其display
属性设置为none
来隐藏该行,因此支持CSS的浏览器将显示该页面,就好像该元素不在那里,但它仍然是脚本等可以访问。您可以从DOM中完全删除该元素。
答案 1 :(得分:0)
你可以使用像这样的javascript
$('tr').each(function() {
if($(this).find('td').length == 0) {
$(this).hide();
}
});
答案 2 :(得分:0)
经过一些研究后,我发现这种溶剂比empty-cells:hide
具有优势,它可以完全消除空单元占据的空间。
<style type="text/css">
table {
border-spacing: 0px; // removes spaces between empty cells
border: 1px solid black;
}
tr, td {
border-style: none; // see note below
padding: 0px; // removes spaces between empty cells
line-height: 2em; // give the text some space inside its cell
height: 0px; // set the size of empty cells to 0
}
</style>
不幸的是你必须设置border-style: none;
,否则无论如何都会绘制空单元格的边框(这会产生粗线)。
我尝试了其他代码,如:
td:empty {
display: none;
border-style: none;
}
但是在我的2列表格中,它删除了左列或右列的边框,但从未删除过两列...
任何关于如何删除空行边框的提示都将不胜感激。
答案 3 :(得分:0)
在我的情况下,单元格有 Spaces tabs 。它们不是数据。
areAllCellsEmpty
: true 如果所有 cell.textContent 为空或空白
innerHTML 没有给出我想要的结果。
用法:
hideEmptyRows_ofTableById("myTable_id"); /* <- your table id here */
代码:
function isEmptyOrSpaces(str){
return str === null || str.trim() === '' ;
}
function areAllCellsEmpty(row) {
var cells = row.cells;
var anyCellFull = false;
for(var j = 0; j < cells.length; j++) {
if( ! isEmptyOrSpaces(cells[j].textContent) ) {
anyCellFull =true;
break;
}
}
return !anyCellFull;
}
function hideEmptyRows_ofTableById(elem_id){
var table = document.getElementById(elem_id);
var rows = table.getElementsByTagName('tr');
for(var i = 0; i < rows.length; i++) {
if( areAllCellsEmpty(rows[i]) ) {
rows[i].style.display = 'none';
}
}
}