表头/正文宽度问题

Table header/body width issue

本文关键字:问题 正文 表头      更新时间:2023-09-26

我有一个表格,它有一个标题行和几行用于正文内容。

现在这些实际上是 2 个单独的表:

  1. 对于页眉
  2. 对于正文内容(是另一个 iframe 的一部分)

我希望列标题的宽度应该相同,并且是相应的正文内容。

如何确保两个宽度相似,并且外观相似,就好像它们是同一表的一部分一样?

我对CSS或Javascript修复都持开放态度。

注意:我将无法使用固定的列宽度,也无法控制合并到一个表中......

也许是这样的东西?这将使您的桌子表现得好像在哪里

    var table1 = document.getElementsByTagName('table')[0].getElementsByTagName('tr');
    var table2 = document.getElementsByTagName('iframe')[0].contentDocument.getElementsByTagName('tr');
    var tr = merge([table1,table2]);
    var padding = 2; //set your padding to make up for difference from offsetwidth vs style width
    var higestWidth = new Array();
    for(var i in tr){
        for(var j in tr[i].childNodes){
        var td = tr[i].childNodes[j];
        if(typeof td == 'object'){
            if(higestWidth[td.cellIndex] == null || higestWidth[td.cellIndex] < td.offsetWidth){
            higestWidth[td.cellIndex] = td.offsetWidth;
            }
        }
        }
        for(var j in tr[i].childNodes){
        var td = tr[i].childNodes[j];
        if(typeof td == 'object'){
            td.setAttribute('width', higestWidth[td.cellIndex] - padding);
            }
        }
        }

差点忘了我在这里使用我自己的一些函数,这里也来了

        var foreach = function(object,loop){
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
            loop(object[key],key);
            }
        }
    }
    var merge = function(objectCollections){
        var array = new Array();
        foreach(objectCollections,function(objectCollection){
            foreach(objectCollection,function(object){
                array.push(object);
            });
        });
        return array;
    }

我有点同意罗德里戈的观点,尽管我会设置最大宽度和最小宽度,而不仅仅是像这样设置宽度:

.col-username { 
     max-width:150px;
     min-width:150px;
}
.col-email { 
     max-width:200px;
     min-width:200px;
}

否则,实际大小可能取决于表格单元格内容和可用空间。

如果表是否"流畅"并不重要,则可以为每个列定义类并使用 css 设置它们的样式。前任:

.col-username { width:150px; }
.col-email { width:200px; }

等等。

编辑:这是我刚刚发现的一个使用CSS来实现此效果的示例。

如果

可以的话,你应该使用<thead><tbody>

<table>
  <thead>
    <tr>
      <th>Col 1</th>
      <th>Col 2</th>
      <th>Col 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1 / Col 1</td>
      <td>Row 1 / Col 2</td>
      <td>Row 1 / Col 3</td>
    </tr>
    <tr>
      <td>Row 2 / Col 1</td>
      <td>Row 2 / Col 2</td>
      <td>Row 2 / Col 3</td>
    </tr>
    ...
  </tbody>
</table>

除非有原因您有单独的表,否则这样做会简单得多。