【问题标题】:How to add new table rows and columns with table headers to CSS table如何将带有表格标题的新表格行和列添加到 CSS 表格
【发布时间】:2011-08-23 16:13:50
【问题描述】:

我有以下表格格式,希望能够根据用户输入添加新列和新行。

文档的可点击部分基本上由名称列表组成,这些名称将成为每行最左侧的项目。此外,还有第二个可点击区域,应在每行水平添加元素,并在添加新列时添加表头。

例如:

名称列表: [杰夫] [比尔] [弗雷德] [杰克]

要添加到每列的项目列表: [苹果] [橙子] [汽车] [鞋子]

如果选择了 Jeff 和 bill 并且选择了苹果和橙子,则应该更新表格以使其看起来像这样。

[Name] [apples] [oranges]
[jeff] [      ] [       ]
[bill] [      ] [       ]

如果随后选择了另一个项目,它将看起来像这样

[Name] [apples] [oranges] [shoes]
[jeff] [      ] [       ] [     ]
[bill] [      ] [       ] [     ]

此外,如果此时选择了另一个名称,它应该看起来像这样

[Name] [apples] [oranges] [shoes]
[jeff] [      ] [       ] [     ]
[bill] [      ] [       ] [     ]
[fred] [      ] [       ] [     ]

这是html结构的样子:

<form>
    <div id="opTable"> 
        <div class="thead">
            <div class="th first">
                Name
            </div>
            <div class="th">
                clase
            </div>
            <div class="th">
                gold
            </div>
        </div>
        <div class="tbody"> 
            <div class="tr"> 
                <div class="td first">
                    Billy
                </div>
                <div class="td">
                    <input type="text" style="width:100px"/>
                </div>
                <div class="td">
                    <input type="text" style="width:100px"/>
                </div>
            </div>
        </div>
    </div>
</form>

此外,代码应该能够以相同的方式删除名称和/或项目。我希望我的问题足够清楚。

【问题讨论】:

    标签: jquery css dynamic css-tables


    【解决方案1】:

    如果您想清楚地显示表格,那么我建议您也使用table 作为标记。

    这也将使将标记呈现为表格变得更加容易:) 通过使用table,将列彼此相邻显示将是一个固有特性。无需 CSS 技巧。

    添加另一行将变为(我在这里使用 DOM API,因为如果您的表变大,它比附加字符串更高效)

    //Assuming each row has the same nr of columns
    var numcols = $('#opTable tr:eq(0) td').length;
    var row = document.createElement('tr');
    
    //Insert name
    var name_td = document.createElement('td');
    row.appendChild(name_td);
    name_td.appendChild(document.createTextNode(name));
    
    //fill the rest with empty td's
    for (var i=1; i < numcols; i++) {
        row.appendChild(document.createElement('td'));
    }
    
    $('#opTable').append(row);
    

    添加一列意味着做一些非常相似的事情,不同之处只是你将&lt;td&gt;附加到每个&lt;tr&gt;

    $('#opTable').find('tr').each(function(i) {
        if (i == 0) {
           $(this).append('<td>' + item + '</td>');  
        }
        else {
            $(this).append('<td/>');
        }
    });
    

    【讨论】:

    • 我正在做一个使用 css 属性定义表的实验。这就是我在问题中指定 css 表的原因。我很欣赏您的回答,并会看看我是否可以使其概念适合我的项目,但我担心问题会以不包括新行中的列的形式出现。
    • 也许让列已经存在并默认隐藏它们会更容易,单击该项目取消隐藏其列。
    【解决方案2】:

    由于您使用的是 jQuery,.append() 和/或 .appendTo() 是您想要使用的函数。将它与.each() 循环结合起来,你应该很高兴。

    【讨论】:

    • 我有点难以理解它是如何工作的。抱歉,我对 javascript 不是很擅长,正在考虑只在 php 中生成表格。我想通过使用 javascript 来减少代码量。有什么方法可以举例说明这个解决方案如何适用于我的问题?
    • 抱歉,您没有提供任何要修复的 JavaScript 代码,而是要求提供完整的解决方案。有了这么多创造性的工作,我开始计费时间。
    • $('#opTable div.thead:first ').append("&lt;div class='th'&gt;header&lt;/div&gt;"); $('#opTable div.tr').each(function(){ $(this).append("&lt;div class='td'&gt;&lt;input type='text' /&gt;&lt;/div&gt;"); }); 是我能够想出的创建新列的代码,但我一生都无法弄清楚如何添加新行并保留所有相同的列存在于上一行中。
    • 要添加新行,您需要使用.after()before()
    • 我想问题是,我要在其中放置新行的最后一个项目的选择器是什么。
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2011-12-14
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多