Convert TD columns into TR rows

后端 未结 4 773
时光取名叫无心
时光取名叫无心 2020-11-28 12:42

Is there a quick way to translate (using CSS or Javascript) a tables TD into TR, currently I have:

A B C D
1 2 3 4

and I want to translate

相关标签:
4条回答
  • 2020-11-28 12:46

    Here is a tested function that will transpose a table, and it will preserve any formatting/events you had hooked to any elements within the table (ie: onclicks on cell or cell contents)

    function TransposeTable(tableId)
    {        
        var tbl = $('#' + tableId);
        var tbody = tbl.find('tbody');
        var oldWidth = tbody.find('tr:first td').length;
        var oldHeight = tbody.find('tr').length;
        var newWidth = oldHeight;
        var newHeight = oldWidth;
    
        var jqOldCells = tbody.find('td');        
    
        var newTbody = $("<tbody></tbody>");
        for(var y=0; y<newHeight; y++)
        {
            var newRow = $("<tr></tr>");
            for(var x=0; x<newWidth; x++)
            {
                newRow.append(jqOldCells.eq((oldWidth*x)+y));
            }
            newTbody.append(newRow);
        }
    
        tbody.replaceWith(newTbody);        
    }
    

    Notes: - Requires Jquery - Not tested on very large tables - Will likely crap out on tables with spanned columns/rows - Will likely crap out on tables with any combination of thead/th

    So as long as your tables have no spanned cells and doesnt use thead/th, should be good to go.

    0 讨论(0)
  • 2020-11-28 12:47

    Maybe someone needs it: I converted TR to TD by CSS (a table with one column). Apply from second line until end of the table on TR the code below:

    <tr style="float:left;">
    

    Also used the code below to show each 3 rows as one line of 3 columns:

    <tr style="float:left; width:33.33%;"> 
    
    0 讨论(0)
  • 2020-11-28 12:55

    You want to turn HTML arranged like this:

    <tr><td>A</td><td>B</td><td>C</td><td>D</td></tr>
    <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
    

    Into this:

    <tr><td>A</td><td>1</td></tr>
    <tr><td>B</td><td>2</td></tr>
    <tr><td>C</td><td>3</td></tr>
    <tr><td>D</td><td>4</td></tr>
    

    Correct?

    You can do this with Javascript, however, it is difficult to suggest a method with out knowing more about the structure of your site/HTML files. I'll give it a go.

    Assuming your <table> tag comes with an id (like this: <table id="myTable"> you can access it in javascript like this:

    var myTable = document.getElementById('myTable');
    

    You can create a new table like this:

    var newTable = document.createElement('table');
    

    Now you need to transpose the old tables rows into the new tables columns:

    var maxColumns = 0;
    // Find the max number of columns
    for(var r = 0; r < myTable.rows.length; r++) {
        if(myTable.rows[r].cells.length > maxColumns) {
            maxColumns = myTable.rows[r].cells.length;
        }
    }
    
    
    for(var c = 0; c < maxColumns; c++) {
        newTable.insertRow(c);
        for(var r = 0; r < myTable.rows.length; r++) {
            if(myTable.rows[r].length <= c) {
                newTable.rows[c].insertCell(r);
                newTable.rows[c].cells[r] = '-';
            }
            else {
                newTable.rows[c].insertCell(r);
                newTable.rows[c].cells[r] = myTable.rows[r].cells[c].innerHTML;
            }
        }
    }
    

    This ought to do what you need. Be forewarned: not tested. Working this javascript code into an HTML page is left as an exercise for the reader. If anyone spots any errors that I missed, I be gratified if you point them out to me or simply edit to fix :)

    0 讨论(0)
  • 2020-11-28 13:08

    This is a solution, in this case this was for for mobiles and tablets, remove the media queries and the th position absolute and u have it!

    based on this:

    table, thead, tbody, th, td, tr { 
    display: block; 
    }
    

    http://css-tricks.com/responsive-data-tables/

    0 讨论(0)
提交回复
热议问题