如何从列数据而不是HTML中的行数据创建表?

时间:2013-04-17 23:15:35

标签: html html-table

根据W3 Schools的这篇文章,可以像这样在HTML中创建一个基本表:

<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 1, cell 2</td>
    </tr>
    <tr>
        <td>row 2, cell 1</td>
        <td>row 2, cell 2</td>
    </tr>
</table>

从上面看,似乎按行输入数据。

我有一种情况需要按列输入所有数据。这样的事情可能吗?

<table border="1">
    <tc>
        <td>row 1, cell 1</td>
        <td>row 2, cell 1</td>
    </tc>
    <tc>
        <td>row 1, cell 2</td>
        <td>row 2, cell 2</td>
    </tc>
</table>

6 个答案:

答案 0 :(得分:19)

您可以使用表格中的表格在列中呈现表格...

<table>
<tr>
<td>
    <table>
        <thead>
            <tr>
                <td>column 1 header 1</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>column 1 row 1</td>
            </tr>
            <tr>
                <td>column 1 row 2</td>
            </tr>
        </tbody>
    </table>
</td>
<td>
    <table>
        <thead>
            <tr>
                <td>column 2 header 1</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>column 2 row 1</td>
            </tr>
            <tr>
                <td>column 2 row 2</td>
            </tr>
        </tbody>
    </table>
</td>
</tr>
</table>

答案 1 :(得分:17)

你最好的选择是按行渲染表格,然后使用javascript反转表格

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

以下代码将反转一个表(此示例代码使用jquery)


    $("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] = $(""); }
                newrows[i].append($(this));
            });
        });

        $this.find("tr").remove();
        $.each(newrows, function(){
            $this.append(this);
        });
    });

更新:

这是一个适用于这些元素的版本: http://jsfiddle.net/zwdLj/

答案 2 :(得分:13)

在现代浏览器中,您可以通过重新定义CSS中的TR和TD标签行为来实现此目的。给定您问题中的HTML,请添加下一个CSS样式:

table {
	display: table;
}
table tr {
	display: table-cell;
}
table tr td {
	display: block;
}
<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 2, cell 1</td>
    </tr>
    <tr>
        <td>row 1, cell 2</td>
        <td>row 2, cell 2</td>
    </tr>
</table>

答案 3 :(得分:0)

通过使用一堆充满lis的uls来做这件事,看起来比我能找到的任何东西都要清洁得多。你必须做一些事情,比如在所有的uls中添加一个类并设置它的样式:inline-table。

@* pseudo html/razor *@
@foreach(var col in columns){
    <ul class='tableColumn'>
        foreach(var data in col){
            <li>data</li>
        }
    </ul>    
}

和一些造型

.tableColumn {
    border: 1px solid;
    display: inline-table;
}

答案 4 :(得分:0)

您始终可以创建一个父元素(表格),然后在表格内部可以创建宽度受限的嵌入式块元素作为您的列,这样,添加到这些子列的所有内容都将遵循向下模式,然后要制作网格状模式,只需确保设置列中元素的高度即可,例如使用列表显示内容:

<div id="your_table">
    <span style="width: 25%" id="fist_column"> <ul></ul></span>
    <span style="width: 25%" id="second_column"><ul></ul></span>
    <span style="width: 25%" id="third_column"><ul></ul></span>
    <span style="width: 25%" id="fourth_column"><ul></ul></span>
</div>

答案 5 :(得分:-1)

我处于相同的情况,我必须按列添加数据。但是,这个问题可以用一种简单的方法解决。我在这个例子中使用了twig,但你很容易理解。

<table>
<tr>
    <th>id</th>
    <th>title</th>
    <th>ISBN</th>
    <th>author_id</th>
    <th>publisher_id</th>
</tr>

{% for book in books %}   //for loop is used before the <tr> tag
    <tr>
        <td>{{ book.id }}</td>
        <td>{{ book.title }}</td>
        <td>{{ book.isbn }}</td>
        <td>{{ book.publisher.id }}</td>
        <td>{{ book.author.id }}</td>
    {% endfor %}
    </tr>

注意:{{这是要打印的数据}}