例如我有这段代码:
<table>
<caption>Test</caption>
<tr>
<th>Values</th>
<td>$100</td>
</tr>
<tr>
<th>Initial value</th>
<td class="results"></td>
</tr>
</table>
有没有办法只使用HTML / CSS隐藏等于$ 0的单元格? 让我们说而不是0美元,我有一个名为费用的变量,可以是各种价值:0美元,20美元,100美元等。
例如:
<script>
var fees = ["$0", "$20", "$100"];
document.querySelector('.results').innerHTML = fees[1];
</script>
有没有办法检查它是什么值,如果发现它是$ 0,我可以隐藏它吗?
我的CSS是:
table{
border-width: 1px;
border-style: solid;
border-collapse: separate;
width: 400px;
}
#test{
empty-cells: show;
margin-bottom: 20px;
}
tr, th, td{
border-width:1px;
border-style: solid;
}
.results {
display: none; // I want this to only display none when fees = $0
}
答案 0 :(得分:9)
TL; DR:这是可能的。在我的答案中寻找最后的解决方案,或查看此博客:
Conditional formatting with pure css
我假设您不想隐藏单元格,而只隐藏它的值。隐藏单元格在表格中没有意义,因为它可能会改变布局,任何单元格边框等也会被隐藏 - 可能不是你想要的。
现在CSS没有任何基于元素文本内容的选择器。但它确实支持属性值选择器。因此,您可以将代码更改为:
<table>
<caption>Test</caption>
<tr>
<th>Values</th>
<td><input value="$100"/></td>
</tr>
<tr>
<th>Initial value</th>
<td><input value="$0"/></td>
</tr>
</table>
并使用像
这样的规则input[value="$0"] {
display: none;
}
您甚至可以通过添加已禁用的属性使输入的行为不像输入,因此它们无法编辑。
如果您不想使用输入元素,则可以考虑使用跨度并使用&#34;数据值&#34;属性,并尝试浏览器是否尊重:
<table>
<caption>Test</caption>
<tr>
<th>Values</th>
<td><span data-value="$100">$100</span></td>
</tr>
<tr>
<th>Initial value</th>
<td ><span data-value="$0">$0</span></td>
</tr>
</table>
css woudl be:
td > span[data-value="$0"] {
display: none;
}
当然,这样做的缺点是你必须将值加两次(一次作为文本内容,一次作为属性),并且你需要生成一个感觉有点难看的内部元素。
或者,您可以尝试添加包含该值的类属性并创建一个类选择器:
<table>
<caption>Test</caption>
<tr>
<th>Values</th>
<td ><span class="value100">$100</span></td>
</tr>
<tr>
<th>Initial value</th>
<td ><span class="value0">$0</span></td>
</tr>
</table>
并且css将是:
td span.value0 {
display: none;
}
当然缺点与前一个方法相同 - 你必须生成两次值,一次作为文本内容,一次作为classname,你需要添加内部跨度。
编辑:美元字符在css类名中无效,所以我将其删除了。
EDIT2:事实证明有一种方法可以做到这一点,而不会将值作为文本和属性重复。作为奖励,事实证明,如果我们依赖于:在伪类之后你不需要内部跨度(因为它是隐藏的类,而不是单元本身):
<table border="1">
<caption>Test</caption>
<tr>
<th>Values</th>
<td data-value="$100"></td>
</tr>
<tr>
<th>Initial value</th>
<td data-value="$0"></td>
</tr>
</table>
使用此css:
td:after {
content: attr(data-value);
}
td[data-value="$0"]:after {
content: "";
}