it-swarm.com.ru

HTML таблица с вертикальными строками

Как сделать вертикальные таблицы в HTML? Под вертикалью я подразумеваю, что строки будут вертикальными с заголовками таблицы слева.

enter image description here

Мне также нужно это так, чтобы я мог получить доступ к этим строкам (в данном случае вертикальным), как в обычной таблице, с помощью <tr>. Это потому, что я получаю данные динамически для одной строки (например, для строки A) и вставляю их в таблицу. Я использую angularJS, чтобы избежать манипуляций с DOM, поэтому я не ищу сложных манипуляций с DOM с помощью Javascript.

13
vishesh

Вы можете использовать <th> в качестве первой ячейки в строке . Вот скрипка: http://jsfiddle.net/w5nWG/


@vishesh, так что вы хотите транспонировать свой стол после того, как DOM готов? попробуйте это http://Gist.github.com/pgaertig/2376975

$(function() {
    var t = $('#thetable tbody').eq(0);
    var r = t.find('tr');
    var cols= r.length;
    var rows= r.eq(0).find('td').length;
    var cell, next, tem, i = 0;
    var tb= $('<tbody></tbody>');

    while(i<rows){
        cell= 0;
        tem= $('<tr></tr>');
        while(cell<cols){
            next= r.eq(cell++).find('td').eq(0);
            tem.append(next);
        }
        tb.append(tem);
        ++i;
    }
    $('#thetable').append(tb);
    $('#thetable').show();
}
0
sebastian

Если вы хотите, чтобы <tr> отображал столбцы, а не строки, попробуйте этот простой CSS

tr { display: block; float: left; }
th, td { display: block; }

Это должно отобразить то, что вы хотите, насколько вы работаете с однострочными ячейками (поведение таблицы отбрасывается), см. скрипку .

58
Jan Turoň

Дэвид Бушелл (David Bushell) предоставил здесь решение и реализацию: http://dbushell.com/demos/tables/rt_05-01-12.html

Хитрость заключается в том, чтобы использовать display: inline-block; в строках таблицы и white-space: nowrap; в теле таблицы.

4
Pratyush

AFAIK, нет волшебного решения, чтобы изменить это .. Что касается поворота (90 градусов), который, скорее всего, повернет весь стол в сторону, подобно тому, как лист бумаги выглядел бы, если бы вы повернули на 90 градусов и это не то, что вы хотите (я думаю?).

Если это возможно (и реально), я бы предложил изменить его в самом HTML.


Как указано в комментариях, здесь нет никаких предложений, поэтому вот базовая альтернатива javascript (даже если это не то, что вы искали) с использованием jQuery. Не зная вашего опыта, я потратил время, чтобы прокомментировать все, чтобы убедиться, что вы понимаете, что делает код.

// Change the selector to suit your needs
$('table').each(function(){
    var table       = $(this), // Reference each table in the page
        header      = $('thead', table), // Reference the table head
        headings    = []; // Set an array for each column

    // If the table doesn't have a header, use it's footer for column titles
    if(!header.length)
        header = $('tfoot', table);
    // If there's no header nor footer, skip to the next table
    if(!header.length)
        continue;

    // Loop each heading to get the header value
    $('th', header).each(function(){
        var heading = $(this).html(); // Each heading value content, including any HTML; use .text() to use the text only
        headings.Push(heading); // Add heading value to array
    });

    // Make sure the content is wrapped in a tbody element for proper syntax
    if(!$('tbody', table).length)
        table.wrapInner('<tbody></tbody>');

    // Set counter to reference the heading in the headings array
    var x = 0;

    // Loop through each row in the table
    $('tbody tr').each(function(){
        var row     = $(this),
            label   = headings[x];

        // Add the heading to the row, as a <th> for visual cues (default: bold)
        row.prepend('<th>'+label+'</th>')

        // Move to the next value in the headings value
        x++;
    });
});
0
davewoodhall
 <table>
     <tr><td>1</td></tr>
     <tr><td>2</td></tr>
     <tr><td>3</td></tr>
 </table>



 table { border-collapse: collapse; }
 table tr { display: block; float: left; }
 table tr tr{ display: block; float: left; }
 table th, table td { display: block; border: none; }
0
Nithiyakumar K