2012-12-14 93 views
1
function load(){ 
    var row="<tr><td><select id=\"chooseclass\"><option value=\"math\">Math</option><option value=\"phys\">Physics</option><option value=\"lit\">Literature</option><option value=\"chem\">Chemistry</option><option value=\"bio\">Biology</option><option value=\"lang\">Language</option><option value=\"proj\">Project</option><option value=\"elec\">Elective</option></select></td><td><input id=\"choosemods\" type=\"text\" /></td><td><input id=\"choosegrade\" type=\"text\" /></td></tr>"; 
    var tablebody = document.getElementById("classestable"); 
    tablebody.innerHTML += "<tbody></tbody>"; 
    tablebody.getElementsByTagName("tbody").innerHTML = ""; 
    for(var i=0;i<15;i++){ 
     tablebody.getElementsByTagName("tbody").innerHTML += row; 
    } 
} 

上述代碼運行良好,但row的內容未添加到tbody無法在表格中添加新行

console.log顯示row的內容是有效的html,並且控制檯中沒有錯誤。爲什麼沒有被添加?

+0

而不是'tablebody.getElementsByTagName(「tbody」)'',使用'tablebody.tBodies [0]' – Ian

+0

對元素使用'.innerHTML'很難年齡...查看'insertRow','insertCell','createElement'和'appendChild' – Ian

+0

而且你不應該在15次放置同一行 - 那裏有相同的'id'屬性的元素,這是HTML不允許的。那麼,至少你會難以用Javascript操縱每一個... – Ian

回答

3

的getElementsByTagName返回一個節點列表,你使用節點的索引

我就這樣,你只掃描DOM的代碼更改爲以下

var innerRow = ""; 

for(var i=0;i<15;i++){ 
    innerRow += row; 
} 

tablebody.getElementsByTagName("tbody")[0].innerHTML = innerRow 

訪問它的第一個節點一次不是15次

2

無法在Internet Explorer的表格上使用innerHTMLgetElementsByTagName返回NodeList而不是單個節點,並且表格還具有tBodies屬性。

你修改後的代碼應該是:

function load(){ 
    var tr = document.createElement('tr'), td; 
    td = tr.appendChild(document.createElement('td')); 
    td.innerHTML = "<select id=\"chooseclass\"><option value=\"math\">Math</option><option value=\"phys\">Physics</option><option value=\"lit\">Literature</option><option value=\"chem\">Chemistry</option><option value=\"bio\">Biology</option><option value=\"lang\">Language</option><option value=\"proj\">Project</option><option value=\"elec\">Elective</option></select>"; 
    td = tr.appendChild(document.createElement('td')); 
    td.innerHTML = "<input id=\"choosemods\" type=\"text\" />"; 
    td = tr.appendChild(document.createElement('td')); 
    td.innerHTML = "<input id=\"choosegrade\" type=\"text\" />"; 
    var tablebody = document.getElementById("classestable").tBodies[0]; 
    for(var i=0;i<15;i++){ 
     tablebody.appendChild(tr.cloneNode(true)); 
    } 
} 
+0

爲什麼你要創建和附加一個已經隱式存在的'tbody'? – Ian

+0

因爲我不直想XD –

+0

哈哈沒問題,只是想知道。另一個問題 - 什麼是'tr.cloneNode(true)'?爲什麼不只是追加'tr'?這一個我不知道 – Ian

0

沒有一點增加每次DOM的循環運行。將它添加到html變量並執行一個dom事務。

function load(){ 
    var html= ''; 
    var row="<tr><td><select id=\"chooseclass\"><option value=\"math\">Math</option><option value=\"phys\">Physics</option><option value=\"lit\">Literature</option><option value=\"chem\">Chemistry</option><option value=\"bio\">Biology</option><option value=\"lang\">Language</option><option value=\"proj\">Project</option><option value=\"elec\">Elective</option></select></td><td><input id=\"choosemods\" type=\"text\" /></td><td><input id=\"choosegrade\" type=\"text\" /></td></tr>"; 
    var tablebody = document.getElementById("classestable"); 
    tablebody.innerHTML += "<tbody></tbody>"; 
    tablebody.getElementsByTagName("tbody").innerHTML = ""; 
    for(var i=0;i<15;i++){ 
     html += row; 
    } 
    tablebody.getElementsByTagName("tbody")[0].innerHTML = html;// Select first element from array of nodes 
} 
+1

請不要在沒有解釋的情況下發布代碼...... –

+0

這仍然沒有解決IE不允許'

'元素中的'innerHTML'這一事實。 –

+1

@Kolink沒有人使用IE,對吧?哦,這些日子...... – Ian

1

你可以嘗試使用的查詢選擇,而不是getElementsByTagName

document.querySelector('#classettable tbody').innerHTML += row;