javascript - 卡住表格中已呈现的列的宽度

标签 javascript html css html-table

对于已经呈现的表格,如果我隐藏某些行,则根据内容动态重新计算列的宽度:

function switchRow(ixRow){

let table = document.getElementById('theTable');

let row = table.rows[ixRow];
let currentVisibility = row.style.display;

row.style.display= currentVisibility== 'none' ? 'table-row' : 'none';

}
table{
  border: 2px solid black;
  padding: .5em;
}
<table id='theTable'>
<tr><td>Hellen</td><td>Smith</td></tr>
<tr><td>Montgomery</td><td>Wolfeschlegelsteinhausenbergerdorff</td></tr>
</table>
<br>
<button onclick="switchRow(1)">Switch row 1</button>

有没有一种简单的方法可以在第一次渲染后“卡住”所有列的宽度,以便隐藏/显示保持所有表格/列的宽度?

编辑以区别于其他可能重复的问题 我正在寻找的是保留在呈现表格时计算的宽度 - 无论规则是明确的还是隐含的 -。一旦显示,宽度必须保持不变。 我不想添加任何宽度优先规则,我想要表格的默认呈现,但一旦呈现,我就不会寻找宽度的动态变化。

最佳答案

我会先计算页面加载后的最大单元格宽度,然后将其分配给单元格,以备后用:

window.onload = function () {
   const table = document.getElementById('theTable');
   const widths = computeColumnWidths(table)
   setColumnWidths(table, widths)
}

function computeColumnWidths(table) {
  const widths = Array.from({ length: table.rows[0].cells.length })
                      .fill(0);
  
  for (let i = 0; i < table.rows.length; i++ ) {
    const row = table.rows[i]
    
    for (let j = 0; j < row.cells.length; j++) {
      const cell = row.cells[j]
      widths[j] = Math.max(widths[j], cell.offsetWidth);
    }
  }
  
  return widths;
}

function setColumnWidths(table, widths) {
  for (let i = 0; i < table.rows.length; i++ ) {
    const row = table.rows[i]
    
    for (let j = 0; j < row.cells.length; j++) {
      const cell = row.cells[j]
      cell.style.width = widths[j] + 'px';
    }
  }
}

function switchRow(ixRow){

  let table = document.getElementById('theTable');

  let row = table.rows[ixRow];
  let currentVisibility = row.style.display;

  row.style.display = currentVisibility == 'none' ? 'table-row' : 'none';

}
table{
  border: 2px solid black;
  padding: .5em;
}
<table id='theTable'>
<tr><td>Hellen</td><td>Smith</td></tr>
<tr><td>Montgomery</td><td>Wolfeschlegelsteinhausenbergerdorff</td></tr>
</table>
<br>
<button onclick="switchRow(1)">Switch row 1</button>

关于javascript - 卡住表格中已呈现的列的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091582/

相关文章:

php - Tinymce Enter 键

javascript - React Native FlatList 错误 -- "Possible Unhandled Promise Rejection (id: 0): undefined is not an object"

javascript - Bootstrap 模式内部的表单不更新 mysql 中的值

html - 如何将 CSS 中的 HTML 数据属性用作属性?

html - HAML 语法突出显示错位

php - 如何在我的元素中绘制饼图

javascript - 粘性页脚菜单

javascript - 使用纯 JavaScript 获取下周的开始和结束日期

html - 为什么我的背景图片没有纵向扩展

html - 多色文本区域