我想显示一个带有控件的基本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>
不,差不多了。从理论上讲,您可以使用visibility: collapse某些方法<col>来做到这一点,但是浏览器的支持并不止于此。
visibility: collapse
<col>
为了提高你已经稍微得到了,你可以使用table-layout: fixed上<table>,让浏览器使用更简单,更快速,更可预见的固定表格的布局算法。你也可以删除.show规则时,细胞不进行display: none由.hide规则将自动出现display: table-cell。允许表显示恢复为默认值而不是显式设置它可以避免IE <8中的问题,在IE <8中,不支持表显示值。
table-layout: fixed
<table>
.show
display: none
.hide
display: table-cell