2013-06-21 153 views
0

表這是我的代碼行添加到表追加與jQuery的

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> 

爲什麼不內<td>的越來越附加表末尾的<tr>標籤,但取而代之的是<tbody>

+1

附加元素,而不是部分HTML。 –

+2

我建議在頂部創建一個字符串,將所有內容添加到它,然後將其附加到'for'的底部。 –

+0

@Carl Saldanha,你想要​​的數據主題是在其他TD的頂部? – blackhawk

回答

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); 
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); 
} 

在那裏你創建一個行,追加單元格,並在它附加新行到表後。 您可能還想緩存對錶格的引用。

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); 
} 
+1

這是一個美麗的答案,因爲設置$('')作爲我們工作的基點是多麼的清楚。一旦我們確定要追加或補充的地方,複雜情況就會消失。很好的答案。 – blackhawk

1

append方法不是writeln等同。它實際上會嘗試對文本進行Parce並生成最終的完整標籤。

使用一個臨時字符串變量來累積所有要添加的內容,並在最後調用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); 
} 
+0

表元素內有一個tbody元素。如果最後一行更改爲$('#table-wrapper table tbody'),這將工作。append(s); – ricksuggs