隐藏表行时,HTML列宽会更改

时间:2012-05-04 05:51:00

标签: javascript html-table width

我是网络编程的新手,所以我可能在这里犯了一些明显的错误。

当我试图在诸如rows [i] .style.display ='none'之类的javascript中隐藏表中的行时,表格布局会完全破坏。最初,细胞内容被包裹起来,桌子的宽度也在缩小。然后我在table标签中添加了style =“table-layout:fixed”,并在每个td中添加了style =“white-space:nowrap”。这会阻止换行,但内容仍然没有在一行上对齐。如果空间和列宽从一行变化到另一行,则单元格开始向左移动。然后,我为每个th和td元素以及包含该表的div添加了固定宽度。问题仍然存在。

我当前的HTML类似于以下内容。


<div style="width: 300px">
  <table id="errorTable" width="100%" cellpadding="5" cellspacing="2" style="table-layout: fixed"> 
    <tr id="HeaderRow">
      <th style="width: 100px;">Header 1</th>
      <th style="width: 50px;">Header 2</th>
      <th style="width: 150px;">Header 3</th>
    </tr>
    <tr id="DetailRow1">                                        
      <td style="white-space:nowrap; width: 100px;">Data 1_1 in Row 1</td>
      <td style="white-space:nowrap; width: 50px;">Data 1_2  in Row 1</td>
      <td style="white-space:nowrap; width: 150px;">Data 1_3 in Row 1</td>
    </tr>
    <tr id="DetailRow2">                                        
      <td style="white-space:nowrap; width: 100px;">Data 2</td>
      <td style="white-space:nowrap; width: 50px;">Data 2</td>
      <td style="white-space:nowrap; width: 150px;">Data 2</td>
    </tr>
    <tr id="DetailRow3">                                        
      <td style="white-space:nowrap; width: 100px;">Data 3_1</td>
      <td style="white-space:nowrap; width: 50px;">Data 3_2</td>
      <td style="white-space:nowrap; width: 150px;">Data 3_3</td>
    </tr>
  </table>
</div>

第一次显示表格时,列正确对齐,宽度分别为100,50和150像素。但是如果有一行,比如第二个被隐藏,则剩下的两个显示行的单元格宽度不再固定为100,50和150,并且数据不再垂直对齐。请注意,整个桌子宽度仍然是300像素。如果有可用空间,则每个单元格中的数据向左移动,并且最后一个使用额外空间,在本例中为第三列。

以下帖子很有帮助,但没有完全解决我的问题,你可以看到。 Hiding table rows without resizing overall width

欢迎任何帮助。

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题:我试图通过elem.style.display="none"隐藏一列,但是当再次显示时,布局被打破了。这种展示风格对我有用:

columns.item(i).style.display = "table-cell";

答案 1 :(得分:0)

始终修复列的宽度。那会解决你的问题吗?

.myTable td{ width:33% !important; }

理想情况下,您还应使用theadtbody

附上标题和正文部分
<table>
  <thead>
    <tr> ... </tr>
  </thead>

  <tbody> 
    .  
    .      
    .
  </tbody>
</table>

答案 2 :(得分:0)

我遇到了同样的问题。我在每张桌子里面扔了一个跨度,看看我是否可以强制宽度,它似乎工作。虽然很难看。

答案 3 :(得分:0)

问题是用于使表行可见的显示类型。
要隐藏表格行,请使用 display =“ none”
要显示表格行,请使用 display =“ table-row”
我做了一个示例,以便您可以看到它们的实际效果。

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

function hide(){
  document.getElementById('trB').style.display='none';
}
@import url("https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css");

table{
  border: 1px solid #ccc;
}
<table id="myTable" class="table table-striped table-hover">
  <thead>
      <tr>
          <td>#</td>
          <td>Letter</td>
      </tr>
  </thead>
  <tbody>
    <tr id="trA">
        <td>1</td>
        <td>A</td>
    </tr>
    <tr id="trB">
        <td>2</td>
        <td>B</td>
    </tr>
    <tr id="trC">
        <td>3</td>
        <td>C</td>
    </tr>
  </tbody>
 </table>
 
 <button id="showB" onclick="show()">show B</button>
 <button id="hideB" onclick="hide()">hide B</button>

答案 4 :(得分:0)

希望这可以帮助遇到相同问题的人。 我没有将display: none;用于隐藏的行,而没有使用visibility: collapse;。这仍然保持列的宽度和整个布局。