Javascript 表格标题/正文宽度问题

Javascript 表格标题/正文宽度问题,javascript,css,html-table,Javascript,Css,Html Table,我有一个表,它有一个标题行和几行正文内容 现在,这实际上是两个独立的表: 用于标题 对于正文内容(它是另一个iframe的一部分) 我希望列标题和相应的正文内容的宽度应该相同 如何确保两种宽度相似,外观相似,就好像它们是同一张表的一部分一样 我对CSS或Javascript补丁都持开放态度 注意:我将无法使用固定列宽度,也无法控制合并到一个表中…如果表“流畅”并不重要,您可以为每个列定义类,并使用css设置它们的样式。例: .col-username { width:150px; } .col-

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

现在,这实际上是两个独立的表:

  • 用于标题
  • 对于正文内容(它是另一个iframe的一部分)
  • 我希望列标题和相应的正文内容的宽度应该相同

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

    我对CSS或Javascript补丁都持开放态度


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

    如果表“流畅”并不重要,您可以为每个列定义类,并使用css设置它们的样式。例:

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


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

    如果表格“流畅”并不重要,您可以为每个列定义类并使用CSS设置样式。例:

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


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

    如果可以,您应该使用

    <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>
    
    
    第1列
    第2列
    第3列
    第1行/第1列
    第1行/第2列
    第1行/第3列
    第2行/第1列
    第2行/第2列
    第2行/第3列
    ...
    

    除非有理由使用单独的表,否则这样做会简单得多。

    如果可以,您应该使用

    <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>
    
    
    第1列
    第2列
    第3列
    第1行/第1列
    第1行/第2列
    第1行/第3列
    第2行/第1列
    第2行/第2列
    第2行/第3列
    ...
    

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

    我有点同意Rodrigo,尽管我会设置最大宽度和最小宽度,而不是像这样设置宽度:

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

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

    我有点同意Rodrigo,尽管我会设置最大宽度和最小宽度,而不是像这样设置宽度:

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

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

    可能是这样的吗?这会让你的桌子看起来像是在那里

        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 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);
                }
            }
            }
    

    我知道这并没有回答您的问题,但您会反对使用Ajax请求而不是iframe,这样您就可以将其作为一个表了吗?在你试图伤害自己之前,我只是想确定这不是一个选择-你能把所有列的宽度都定下来吗?我知道这并不能回答你的问题,但是你会反对使用Ajax请求而不是iframe,这样你就可以把它变成一个表吗?在你试图伤害自己之前,我只是想确定这不是一个选择-你能把所有列的宽度都定下来吗?否则,您将不得不使用跨iframe javascript,这可能是一个难题。Thx很多。我假设urs是一个通用解决方案,应该适用于任何列宽度。我也将尝试相同的解决方案。Thx再次..HTMLTableElement.rows可能会引起您的兴趣。只是一个简单的问题..合并函数..它只是计算更大的宽度并进行相应的设置,还是进行某种合并..它只是一个函数,将两个或多个ObjectCollection合并到一个数组中,因为它不能用concat完成:)非常感谢Matt McDonald,我在我的lib文件中得到了类似的东西,但是我还没有设法使它在ie6中工作。由于某些原因,我得到了一个错误td.setAttribute不是td.setAttribute(“width”,higestWidth[td.cellIndex]-padding)行的函数。。。。i、 即使它通过了if(typeof td=='object')Thx的条件很多..我假设urs是一个通用的解决方案,应该适用于任何列宽度..我也会再次尝试相同的..Thx..HTMLTableElement.rows可能会引起您的兴趣。只是一个简单的问题..合并函数..它只是计算更大的宽度并进行相应的设置,还是进行某种合并..它只是一个函数,将两个或多个ObjectCollection合并到一个数组中,因为它不能用concat完成:)非常感谢Matt McDonald,我在我的lib文件中得到了类似的东西,但是我还没有设法使它在ie6中工作。由于某些原因,我得到了一个错误td.setAttribute不是td.setAttribute(“width”,higestWidth[td.cellIndex]-padding)行的函数。。。。i、 即使它通过了if的条件(typeof td=='object')