0

这是我向表中添加行的代码

for(var i=0;i<subjects.length;i++){
    $('#table-wrapper table').append("<tr><td data-subjectid="+i+">"+subjects[i].name+"</td>");
    for(var j=0;j<no_of_batches;j++){
            $('#table-wrapper table').append("<td data-batchid="+j+"></td>");
    }
    $('#table-wrapper table').append("</tr>");
} 

这产生的输出是

<table> 
    <tbody>
       <tr>
         <tr>
           <td data-subjectid="2">DBMS</td>
         </tr>
     </tbody>
        <td data-batchid="0"></td>
        <td data-batchid="1"></td>
        <td data-batchid="2"></td>
        <td data-batchid="3"></td>
 </table>

为什么 inner 没有<td>被附加到<tr>表格末尾的标签上,而是在<tbody>

4

4 回答 4

2

你需要这样做——

for(var i=0;i<subjects.length;i++){
    var $tr = $('<tr></tr>');
    $tr.append("<td data-subjectid="+i+">"+subjects[i].name+"</td>");
    for(var j=0;j<no_of_batches;j++){
            $tr.append("<td data-batchid="+j+"></td>");
    }
    $('#table-wrapper table').append($tr);
} 
于 2013-06-21T14:46:16.543 回答
1

如果我正确理解您的代码,您可以尝试这种方式:

var table = $('#table-wrapper table');
for(var i = 0; i < subjects.length; i++) {
    var row = $('<tr />');
    row.append("<td data-subjectid=" + i + ">" + subjects[i].name + "</td>");
    for(var j = 0; j < no_of_batches; j++) {
        row.append("<td data-batchid=" + j + "></td>");
    }
    table.append(row);
} 

在那里您创建一行,将单元格附加到它,然后将新行附加到表中。您可能还希望缓存对表的引用。

于 2013-06-21T14:46:06.063 回答
1

append方法不是writeln等效的。它实际上试图对文本进行分割并生成最终的完整标签。

使用临时字符串变量来累积您要附加的所有内容,append最后只调用一次。

var s;
for(var i=0;i<subjects.length;i++){
  s = "<tr><td data-subjectid="+i+">"+subjects[i].name+"</td>";
  for(var j=0;j<no_of_batches;j++){
    s += "<td data-batchid="+j+"></td>";
  }
  s += "</tr>";
  $('#table-wrapper table').append(s);
} 
于 2013-06-21T14:46:29.750 回答
1

您通过以下方式附加到表中

$('#table-wrapper table').append("<td data-batchid="+j+"></td>");

需要附加到最后一个 tr

$('#table-wrapper table tr:last-child').append("<td data-batchid="+j+"></td>");

尚未测试,但它应该可以工作

更好的方法是将内容添加到字符串然后追加一次

var temp;
for(var i=0;i<subjects.length;i++){
    temp = "<tr><td data-subjectid="+i+">"+subjects[i].name+"</td>";
    for(var j=0;j<no_of_batches;j++){
            temp = temp + "<td data-batchid="+j+"></td>";
    }
    temp = temp + "</tr>"
}
$('#table-wrapper table tbody').append(temp); 
于 2013-06-21T14:45:14.843 回答