【问题标题】:How can I insert a <tr> element into a dynamic table?如何将 <tr> 元素插入到动态表中?
【发布时间】:2014-04-06 15:05:03
【问题描述】:

我希望有人对我有线索。我是 javascript 新手,我正在尝试使用动态生成的表来构建这个结构。

<table>
<tr>
  <td>value1</td>
  <td>value2</td>       
  <td>value3</td>
  <td>value4</td>
</tr>
<tr>
  <td>value5</td>
  <td>value6</td>       
  <td>value7</td>
  <td>value8</td>
</tr>
<tr>
  <td>value9</td>
  <td>value10</td>      
  <td>value11</td>
  <td>value12</td>
</tr>
<tr>
  <td>value13</td>
  <td>value14</td>      
  <td>value15</td>
  <td>value16</td>
</tr>
</table>

我尝试做的是在每第四对&lt;td&gt; 之后回显&lt;tr&gt;。 像这样:

var tbody_el = $("#somevalue_id"); //is the id of the table, which needs to be filled with `<tr>` and `<td>`.
var counter = 0;
$.each(TonsOfData.getValues(), function(index, somevalue) {
            //var tr_el = $("<tr></tr>");
            var td_checkbox_el = $("<td></td>");
            var cbName  =   "cb_"   + somevalue.displayName + "_name";
            var cbId    =   "cb_"   + somevalue.displayName + "_id";
            var inputEl = $("<input type='checkbox' name='" + somevalue.displayName + "' id='" + cbId + "'/>");
            inputEl.data("somevalueId", somevalue.id);
            inputEl.attr("checked", "checked");
            inputEl.change(valueChoicesClick);
            var div_value_id = "div_value_" + somevalue.id + "_id";
            var div_value_el = $("<div id='" + div_value_id + "' align='left'></div>");
            var td_value = $("<td></td>");


            td_checkbox_el.append(inputEl);
            if(counter == 0 || (counter +1)%4 == 0){
                echo "<tr>";
            } 
            td_value.append(td_checkbox_el, "<br> Displayname: " + somevalue.displayName,"<br> Unit: "+ somevalue.unitstring," <br>",div_value_el);

            if((counter +1)%4 == 0) {
                echo "</tr>";
            }           
            //tbody_el.append(tr_el);
        }
        );

这甚至可能吗? 还是我走错了路?

非常感谢您的任何建议!

编辑: 我找到了一个适合我的解决方案。我怀疑有人会遇到同样的问题,但我还是想分享一下。 我创建了一个在循环中递增的计数器,并为 &lt;td&gt; 部分提供了一个类 ID。

if(counter<4){
    td_value = $("<td class='select1'></td>");
}
if(counter>3 && counter <8){
    td_value = $("<td class='select2'></td>");
}
if(counter>7 && counter <12){
    td_value = $("<td class='select3'></td>");
}
if(counter>11 && counter <16){
    td_value = $("<td class='select4'></td>");
}
if(counter>15 && counter <20){
    td_value = $("<td class='select5'></td>");
}

之后,我使用 JQuery wrapAll()-函数添加了我的 &lt;tr&gt;。成功了。

$('#somevalue_id td.select1').wrapAll('<tr/>');
$('#somevalue_id td.select2').wrapAll('<tr/>');  
$('#somevalue_id td.select3').wrapAll('<tr/>');  
$('#somevalue_id td.select4').wrapAll('<tr/>');  
$('#somevalue_id td.select5').wrapAll('<tr/>');

我知道,这不是最优雅的解决方案,但它确实有效。 再次感谢所有给我提示的人,你们帮我解决了这个问题!

【问题讨论】:

  • echo 不是 JavaScript。但是您可以像当前创建 td 元素一样创建 tr 元素。然后将 trs 追加到表中,并将 tds 追加到最新的 tr。
  • 最明显的解决方案是for循环递增4,如for (var i=0; i&lt;something; i+=4),然后在tr等中获取当前和下一个三个值。

标签: javascript jquery html dynamic tablecolumn


【解决方案1】:

您可以使用 jquery 并使用 .each 进行迭代,并使用 .nth-child 在每次迭代中获取第四个元素,并在使用 .insertAfter 之后插入

【讨论】:

  • 感谢您的快速回复!我仍在努力让它工作,尽管 js 的行为不像我预期的那样。我试过这个:$( "&lt;tr&gt;" ).insertBefore("td:eq( 0 )"); $( "&lt;tr/&gt;&lt;tr&gt;" ).insertAfter("td:eq( 3 )"); $( "&lt;tr/&gt;" ).insertAfter("td:eq( 7 )"); 但是当我用 jsfiddle 测试它时没有任何反应。我什至不确定是否允许将&lt;tr&gt;&lt;/tr&gt; 分成两部分。我也尝试了这种方法:$('&lt;tr/&gt;').insertAfter('#my_table td:nth-child(4)'); $('&lt;tr&gt;').insertBefore('#my_table td:nth-child(1)');,但也没有运气。我似乎遗漏了一些关键点。
【解决方案2】:

请找到相应的示例来更新表格。 这是您可以做到的一种方法

<table class="test_table" id="test_table">
</table>

var tableEl = $(".test_table");
var noOfRows = 4;
var noOfColumns = 4;
//Empty the table in case there is anything already there

tableEl.each(function(){
    var tableElObject = $(this);
    for(i=0;i<noOfRows;i++)
    {
        rowStart = "<tr>";
        for(j=0;j<noOfColumns;j++)
        {
            rowStart +="<td>"+"Test"+i+j+"</td>";
        }
        tableElObject.append(rowStart+"<tr/>");
    }

});

http://jsfiddle.net/qg5hG/

【讨论】:

  • 感谢您的快速回复,我也尝试了您的方法! “问题”是,对于每个循环,表都需要在这个内部:$.each(TonsOfData.getValues(), function(index, somevalue),因为它一次获取一个实时数据。意味着,我不能将它存储在数组中并将其传递给表。 (这正是我需要的结构,谢谢!)
【解决方案3】:

如果您想动态创建表 trs 和 tds,这种方式可能更适合您....

var table = document.createElement('table');
    table.setAttribute('border','0');
    table.setAttribute('cellspacing','5');
    table.setAttribute('cellpadding','5');
    table.setAttribute('width','100%');

    var tr = table.insertRow(-1);// "-1"s meaning add tr to end of table if you want to add top of table you must use "0"
        tr.id = 'Tr1 ID';

        var td = tr.insertCell(-1);
            td.innerHTML = 'Inside of TD 1';

        var td = tr.insertCell(-1);
            td.innerHTML = 'Inside of TD 2';

    var tr = table.insertRow(-1);

        var td = tr.insertCell(-1);
            td.innerHTML = 'Inside of TD 1';

        var td = tr.insertCell(-1);
            td.innerHTML = 'Inside of TD 2';

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2021-08-10
    • 1970-01-01
    • 2019-12-03
    • 2013-06-28
    • 2018-08-02
    相关资源
    最近更新 更多