【问题标题】:Is there a way to hide a data cell based on a specific value using just HTML/CSS?有没有办法仅使用 HTML/CSS 来隐藏基于特定值的数据单元格?
【发布时间】:2015-06-12 13:02:43
【问题描述】:

例如我有这个代码:

<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 的单元格? 假设我有一个名为 fee 的变量而不是 $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
}

【问题讨论】:

  • 为了计算这样的东西,你需要javascript。 CSS 和 HTML 是标记语言,不能计算这样的内容。
  • 不。 HTML 或 CSS 无法读取值。你需要一种脚本语言来做到这一点。
  • 没有。但是,如果您要动态填充td 内容,也许您还可以将data-attribute 应用到具有该值的td 并使用CSS 定位它。到那时你也可以申请一个课程。

标签: javascript html css html-table cell


【解决方案1】:

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;
}

您甚至可以通过添加禁用属性使输入的行为不像输入,这样它们就不可编辑了。

如果您不想使用输入元素,您可以考虑使用 span 并使用“数据值”属性,并尝试浏览器是否尊重这一点:

<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 将是:

td > span[data-value="$0"] {
    display: none;
}

当然,这样做的缺点是你必须添加两次值(一次作为文本内容,一次作为属性),并且你需要生成一个感觉有点难看的内部 span 元素。

或者,您可以尝试添加一个包含该值的类属性并创建一个类选择器:

<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;   
}

当然缺点和之前的方法一样——你必须生成两次值,一次作为文本内容,一次作为类名,并且你需要添加内部跨度。

编辑:美元字符在 css 类名中无效,因此我将其删除。

EDIT2:事实证明,有一种方法可以做到这一点,而无需将值复制为文本和属性。作为奖励,如果我们依赖 :after 伪类(因为隐藏的是该类,而不是单元格本身),事实证明您也不需要内部跨度:

<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: "";
  }

【讨论】:

  • 我可以确认所有这些方法都适用于 Chrome 和 Firefox。我不想在 IE 中尝试。让我们知道谁这样做。
  • 非常有创意的实现
  • 基于这些想法的条件格式的更多想法rpbouman.blogspot.nl/2015/04/…
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多