【问题标题】:DOM: How to convert a table into a table with a 2-column table per row?DOM:如何将表格转换为每行包含 2 列的表格?
【发布时间】:2018-09-06 00:04:45
【问题描述】:

如何将带有水平标题的 HTML 表格转换为每行包含两列表格的表格?

左侧的列将包含垂直标题,而右侧的列将包含相关值。

This fiddle 显示了原始表格和将要显示的表格的示例。

看看this couple of tables,预期的行为包括将带有水平标题的表格变成带有垂直标题的表格,但要注意如果第一个表格有不止一行,第二个表格也应该包含相同数量的行,但由第一列中带有垂直标题的表格和第二列中的对应值组成。

原表:

<table id="tableid">
<thead>
    <tr>
        <th>Name</th>
        <th>Surname</th>
        <th>Age</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>John</td>
        <td>Smith</td>
        <td>47</td>
    </tr>
    <tr>
        <td>Bob</td>
        <td>Jones</td>
        <td>38</td>
    </tr>
</tbody>

目标表:

<table id="tableid">
    <tr>
        <table>
            <tr>
                <th>Name</th>
                <td>John</td>
            </tr>
            <tr>
                <th>Surname</th>
                <td>Smith</td></tr>
            <tr>
                <th>Age</th>
                <td>47</td>
            </tr>
        </table>
    </tr>
    <tr>
        <table>
            <tr>
                <th>Name</th>
                <td>Bob</td>
            </tr>
            <tr>
                <th>Surname</th>
                <td>Jones</td></tr>
            <tr>
                <th>Age</th>
                <td>38</td>
            </tr>
        </table>
    </tr>
</table>

【问题讨论】:

  • 是打算手动转换还是用javascript编程?
  • 使用 javascript 和/或 CSS 以编程方式。
  • javascript代码的输入应该是什么?
  • 我正在尝试修改网页,在页面加载时,通过覆盖 Chrome 中的一些 js/css,借助扩展 User Javascript 和 CSS:chrome.google.com/webstore/detail/user-javascript-and-css/…。所以我认为 javascript 的输入将是页面加载时的文档对象模型。
  • 我尝试过用 tr { display: block; 覆盖一些 CSS向左飘浮; } th, td { 显示:块;但这还不够好,即使是粗略的解决方法...有什么想法吗?

标签: javascript html dom xpath html-table


【解决方案1】:

我希望这可能对您有所帮助,这实际上是将垂直表反转为水平表。

function inverse(){
  var t= document.getElementsByTagName('tbody')[0];
  r= t.getElementsByTagName('tr');
  cols= r.length; 
  rows= r[0].getElementsByTagName('td').length;
  let cell;
  let next;
  let tem;
  i= 0;
  tbod= document.createElement('tbody');

  while(i<rows){
    cell= 0;
    tem= document.createElement('tr');
    while(cell<cols){
        next= r[cell++].getElementsByTagName('td')[0];
        tem.appendChild(next);
    }
    tbod.appendChild(tem);
    ++i;
  }
  t.parentNode.replaceChild(tbod, t);
}

【讨论】:

  • 谢谢梅赫迪。我已经尝试过类似的功能,但它并没有真正解决问题。我使用的功能是在这个问题中:stackoverflow.com/questions/2730699/…
  • 几乎一样,还是不明白到底想要什么?
  • 想象一个 100 列 * 1000 行的表格。交换列和行将产生一个 1000*100 的表,这不会消除水平滚动的需要。对于原始表中的每一行,我们可以创建一个有 2 列的表:左边的总是包含原始表的列标题,但在一行中;而右边的列将包含适当的值。请运行第二个表的 sn-p,并想象更多的人物属性和人物,注意它只会增加垂直滚动/高度,不需要水平滚动。
猜你喜欢
  • 2019-09-19
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2022-01-22
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
相关资源
最近更新 更多