一尘不染

使用CSS显示/隐藏html表列

css

我想显示一个带有控件的基本html表,以切换其他列的显示/隐藏:

<table id="mytable">
    <tr>
        <th>Column 1</th>
        <th class="col1">1a</th>
        <th class="col1">1b</th>
        <th>Column 2</th>
        <th class="col2">2a</th>
        <th class="col2">2b</th>
    </tr>
    <tr>
        <td>100</td>
        <td class="col1">40</td>
        <td class="col1">60</td>
        <td>200</td>
        <td class="col2">110</td>
        <td class="col2">90</td>
    </tr>
</table>

因此,默认情况下,列1和列2将是唯一显示的列-但是,当您单击列1时,我希望1a和1b切换,与列2和2a和2b相同。我可能最终会有更多的列和很多行-
因此,当我进行测试时,任何JavaScript循环方法都太慢而无法使用。

似乎足够快的唯一方法是设置一些CSS,如下所示:

table.hide1 .col1 { display: none; }
table.hide2 .col2 { display: none; }
table.hide3 .col3 { display: none; }

table.show1 .col1 { display: table-cell; }
table.show2 .col2 { display: table-cell; }
table.show3 .col3 { display: table-cell; }

然后在表标题单元格上设置onClick函数调用,这将触发切换-并确定将哪个“ cstable”类设置为“
mytable”,这将创建我正在寻找的切换效果。是否有一种简单的方法来设置此代码,以便代码可用于n#列?

更新资料

这是我想出的,效果很好-而且速度很快。让我知道您是否可以想到改进方法。

的CSS

.col1 {display: none; }
.col2 {display: none; }
.col3 {display: none; }

table.show1 .col1 { display: table-cell; }
table.show2 .col2 { display: table-cell; }
table.show3 .col3 { display: table-cell; }

Java脚本

function toggleColumn(n) {
    var currentClass = document.getElementById("mytable").className;
    if (currentClass.indexOf("show"+n) != -1) {
        document.getElementById("mytable").className = currentClass.replace("show"+n, "");
    }
    else {
        document.getElementById("mytable").className += " " + "show"+n;
    }
}

和html片段:

<table id="mytable">
<tr>
    <th onclick="toggleColumn(1)">Col 1 = A + B + C</th>
    <th class="col1">A</th>
    <th class="col1">B</th>
    <th class="col1">C</th>
    <th onclick="toggleColumn(2)">Col 2 = D + E + F</th>
    <th class="col2">D</th>
    <th class="col2">E</th>
    <th class="col2">F</th>
    <th onclick="toggleColumn(3)">Col 3 = G + H + I</th>
    <th class="col3">G</th>
    <th class="col3">H</th>
    <th class="col3">I</th>
</tr>
<tr>
    <td>20</td>
    <td class="col1">10</td>
    <td class="col1">10</td>
    <td class="col1">0</td>
    <td>20</td>
    <td class="col2">10</td>
    <td class="col2">8</td>
    <td class="col2">2</td>
    <td>20</td>
    <td class="col3">10</td>
    <td class="col3">8</td>
    <td class="col3">2</td>
</tr>
</table>

阅读 673

收藏
2020-05-16

共1个答案

一尘不染

不,差不多了。从理论上讲,您可以使用visibility: collapse某些方法<col>来做到这一点,但是浏览器的支持并不止于此。

为了提高你已经稍微得到了,你可以使用table-layout: fixed<table>,让浏览器使用更简单,更快速,更可预见的固定表格的布局算法。你也可以删除.show规则时,细胞不进行display: none.hide规则将自动出现display: table-cell。允许表显示恢复为默认值而不是显式设置它可以避免IE <8中的问题,在IE
<8中,不支持表显示值。

2020-05-16