如何反转(转置)HTML表的行和列?

Red*_*ddy 34 javascript html-table

我想在HTML表中转置行和列,即行作为列,列作为行.

我能以什么方式做到这一点?

示例:

1 4 7  
2 5 8  
3 6 9
Run Code Online (Sandbox Code Playgroud)

1 2 3  
4 5 6  
7 8 9  
Run Code Online (Sandbox Code Playgroud)

svi*_*nto 40

http://jsfiddle.net/CsgK9/2/

HTML:

<table>
    <tr>
        <td>1</td>
        <td>4</td>
        <td>7</td>
    </tr>
    <tr>
        <td>2</td>
        <td>5</td>
        <td>8</td>
    </tr>
    <tr>
        <td>3</td>
        <td>6</td>
        <td>9</td>
    </tr>
</table>


<p><a href="#">Do it.</a></p>
Run Code Online (Sandbox Code Playgroud)

JS:

$("a").click(function(){
    $("table").each(function() {
        var $this = $(this);
        var newrows = [];
        $this.find("tr").each(function(){
            var i = 0;
            $(this).find("td").each(function(){
                i++;
                if(newrows[i] === undefined) { newrows[i] = $("<tr></tr>"); }
                newrows[i].append($(this));
            });
        });
        $this.find("tr").remove();
        $.each(newrows, function(){
            $this.append(this);
        });
    });

    return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 我尝试编辑以添加支持,但我的编辑被拒绝说它应该以新答案的形式,但我不能,因为问题是关闭...为什么它又关闭?我认为不应该.无论如何它在这里.http://jsfiddle.net/CsgK9/770/ (4认同)
  • 支持`td`和`th`(混合)会很棒. (2认同)

ros*_*.dk 20

有一个由David Bushell提供的CSS解决方案(使用flexbox):http://dbushell.com/2016/03/04/css-only-responsive-tables/

还有这个CSS解决方案(使用float)

tr { display: block; float: left; }
th, td { display: block; }
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/XKnKL/3/

(在这个答案中都提到了它们:带有垂直行的HTML表格)

  • 在 jsfiddle 中,如果将“&lt;br /&gt;”放入一个单元格中(即“&lt;td&gt;James&lt;br /&gt;Bond&lt;/td&gt;”),则看起来是错误的。Bushell 的解决方案也是如此。 (3认同)

Ste*_*all 10

这适用于任意html:

function swap( cells, x, y ){
   if( x != y ){     
   var $cell1 = cells[y][x];
   var $cell2 = cells[x][y];
   $cell1.replaceWith( $cell2.clone() );
   $cell2.replaceWith( $cell1.clone() );
    }
}

var cells = [];
$('table').find('tr').each(function(){
    var row = [];
    $(this).find('td').each(function(){
       row.push( $(this) );    
    });
    cells.push( row );
});

for( var y = 0; y <= cells.length/2; y++ ){
    for( var x = 0; x < cells[y].length; x++ ){
        swap( cells, x, y );
    }   
}
Run Code Online (Sandbox Code Playgroud)

工作小提琴:

http://jsfiddle.net/Hskke/1/

  • 行!= colums时不起作用 (4认同)