更改显示时,表格单元格不均匀

时间:2015-11-01 13:50:49

标签: html

当我使用JavaScript(display:block)隐藏和显示行时,我的HTML表格出现问题。 我需要通过JavaScript隐藏行,但是当我重新显示行时,我发现表格网格布局丢失了,之前隐藏的行被折叠到网格的左侧。

我的沙箱代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
    table {
    }
    .rowA {
        background-color: #70cdb3;
    }
    .rowB {
        background-color: #fff1dc;
    }
    .rowC {
        background-color: #edc7ff;
    }
    .cell {
        border: solid 3pt white;
        width:25%;
    }
    a {
        cursor: pointer;
    }
</style>

<SCRIPT type='text/JavaScript'>
    function hide(elemid) {
        var elem=document.getElementById(elemid);
        elem.style.display='none';
    }

    function show(elemid) {
        var elem=document.getElementById(elemid);
        elem.style.display='block';
    }
</SCRIPT>
</head>
<body>

<table>
<tr class='rowA'>
    <td class='cell'>
    <a onClick="hide('row1')">Hide Row1</a>
    </td>
    <td class='cell'>
    <a onClick="show('row1')">show Row1</a>
    </td>
</tr>
<tr class='rowB'>
    <td class='cell'>
    <a onClick="hide('row2')">Hide Row2</a>
    </td>
    <td class='cell'>
    <a onClick="show('row2')">show Row2</a>
    </td>
</tr>
<tr class='rowC'>
    <td class='cell'>
    <a onClick="hide('row3')">Hide Row3</a>
    </td>
    <td class='cell'>
    <a onClick="show('row3')">show Row3</a>
    </td>
</tr>
</table>
<hr>
<table class='table' style='width:50%'>
<thead>
<tr>
    <th>ID</th>
    <th>Name</th>
    <th>Job</th>
    <th>Email</th>
</tr>
</thead>
<tbody>
<tr class='rowA' id='row1'>
    <td class='cell'>one</td>
    <td class='cell'>Johnny Five</td>
    <td class='cell'>Robotin'</td>
    <td class='cell'>need@input.com</td>
</tr>
<tr class='rowB' id='row2'>
    <td class='cell'>two</td>
    <td class='cell'>Super notsolong</td>
    <td class='cell'>Doin' stuff</td>
    <td class='cell'>doing@stuff.com</td>
</tr>
<tr class='rowC' id='row3'>
    <td class='cell'>three</td>
    <td class='cell'>Super Superlonglastnamesmith</td>
    <td class='cell'>Doin' stuff</td>
    <td class='cell'>doing@stuff.com</td>
</tr>
</tbody>
</table>


</body>
</html>

使用沙箱时,问题是当我单击沙箱顶部的隐藏行按钮,然后再次显示该行时 - 然后行单元格会向左折叠。

请注意,这似乎发生在IE 10,Edge,Chrome和Firefox中,而不是IE9

我做错了什么?

由于

A

2 个答案:

答案 0 :(得分:1)

<tr>不是块元素。因此,在表格上下文中显示它会产生奇怪的结果。这里适当的值是display:table-row;

请点击此处:http://jsfiddle.net/v05nhb9y/

您的代码将如下所示:

function hide(elemid) {
     var elem=document.getElementById(elemid);
     elem.style.display='none';
 }

function show(elemid) {
    var elem=document.getElementById(elemid);
    elem.style.display='table-row';
} 

答案 1 :(得分:1)

表格行的默认显示选项为table-row,您无法使用block

function show(elemid) {
    var elem=document.getElementById(elemid);
    elem.style.display='table-row';
}

如果有疑问,您可以为显示属性设置空白值,它将返回其默认值。

这也可以。

function show(elemid) {
    var elem=document.getElementById(elemid);
    elem.style.display='';
}