我有一个包含几行的HTML表(这是动态构建的)。所有的<tr>都有一个<td>。
如果一个<td>里面没有超文本标记语言的内容,我希望它是不可见的。
如何做到这一点?(并不是说里面的超文本标记语言是动态呈现的,我不想在<td>或<tr>上使用display:none或任何其他属性)。
代码示例:
<html>
<body bgcolor="#E6E6FA">
<table cellSpacing="0" cellPadding="0">
<tr>
<td>one cell</td>
</tr>
<tr>
<td bgcolor="#FF0000"></td>
</tr>
<tr>
<td>two cell</td>
</tr>
</table>
</body>
</html>在Firefox中,空的TD是不可见的。然而,在IE中,TD占据了1个像素的高度:

使用DOM Inspector查看,我发现它需要1个像素:

如何将TD设置为不可见?有什么脚本可以在TD中执行吗?
发布于 2012-04-02 15:55:27
您可以使用CSS伪选择器:empty:
#myDynamicTable td:empty
{
display: none;
}jsFiddle示例:http://jsfiddle.net/vKEBY/6/
如果你想支持IE<9:
var ieVer = getInternetExplorerVersion();
if (ieVer != -1 && ieVer < 9.0) {
// for IE<9 support
var dynamicTable = document.getElementById("myDynamicTable");
var TDs = dynamicTable.getElementsByTagName("td");
for (var i = 0; i < TDs.length; i++) {
if (TDs[i].innerHTML == "") {
TDs[i].style.display = "none";
}
}
}
/**
* All credits to Microsoft
* http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx#ParsingUA
*/
function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer') {
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null) rv = parseFloat(RegExp.$1);
}
return rv;
}jsFiddle示例:http://jsfiddle.net/vKEBY/6/
发布于 2012-04-02 16:31:00
如果使用jQuery,这个脚本会变得更加清晰(只是一个想法)。
$('#myTable td:empty').hide();https://stackoverflow.com/questions/9972599
复制相似问题