2013-03-05 198 views
0

我將tr s附加到字符串的表中。我使用下面的代碼使用innerHTML編寫整個表格,然後我可以使用標準DOM將新的位傳輸到現有的表格。JavaScript for循環 - 循環遍歷行以添加到表

var div = document.createElement("div"); 
div.innerHTML = "<table><tbody>" + string + "</tbody></table>"; 

使用下面的簡單的Javascript是好的,直到我們看看CSS樣式。這導致每個部分在不同的tbody。爲CSS樣式使用:nth-child(odd)

document.getElementById("left").appendChild(div.firstChild.tBodies[0]); 

因此,我已經改變了代碼,這一點,但它僅增加每隔一行表中這是不能接受的。我做錯了什麼?

var tableBody = div.firstChild.tBodies[0]; 
var appendToTable = document.getElementById("left").tBodies[0]; 

var totalnodes = tableBody.childNodes.length; 

for (var thenodes = 0; thenodes < totalnodes; thenodes++) { 
    appendToTable.appendChild(tableBody.childNodes[thenodes]); 
} 
+0

您可以創建在http://jsfiddle.net/ – 2013-03-05 03:40:17

+0

@ArunPJohny我會演示,但是,它看起來我們已經找到了我們答案。 – michaellindahl 2013-03-05 03:49:23

+0

然後請張貼答案並將其標記爲接受 – 2013-03-05 03:50:39

回答

3

childNodes是一個活動節點集,所以當你刪除它時,其他元素向下移動索引。所以你最終得到隔行。

while (tableBody.childNodes.length) { 
    appendToTable.appendChild(tableBody.childNodes[0]); 
} 
+0

因此,訪問一個childNode會將它從集合中刪除?我在哪裏可以瞭解更多關於這個活節點集的想法。 – michaellindahl 2013-03-05 03:48:50

+0

不是所有的tbody的孩子都是行。在一些瀏覽器中,一些子節點將是文本節點。以上內容也將轉移這些(這不是一個發佈,只是指出)。 – RobG 2013-03-05 03:53:57

+1

@ michaellindahl - 是的。您正在將節點從一個父節點移動到另一個父節點,因此它們不再是初始tbody元素的成員。這些都在[相關規範]中列出(http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-184E7107)。 – RobG 2013-03-05 03:55:48