2017-08-15 49 views
0

當我嘗試使用以下代碼時,innerHTML寫入開發控制檯而不是用myTable替換頁面主體。innerHTML = var寫入到控制檯而不是頁面

document.getElementsByClassName('body').innerHTML = myTable; 

myTable只是一系列格式化爲表格的文本項目。我曾嘗試使用jQuery

$("body").html(myTable); 

但是,我正嘗試在javascript中完成這項工作,因爲這會導致併發症。

全部下面的代碼:

var titleArray = []; 
var descArray = []; 
var myTable = "<table><thead><tr><th>Index</th><th>Item Name</th> 
<th>Description</th></tr></thead><tbody>"; 

var doc = top.frames['bsscright'].document; 
titleArray = doc.getElementsByTagName('dt'); 
descArray = doc.getElementsByTagName('dd'); 

for (var i = 0; i < titleArray.length; i++) { 
    myTable+="<tr><td>" + i + "</td>"; 
    myTable+="<td>" + titleArray[i].innerText + "</td>"; 
    myTable+="<td>" + descArray[i].innerText + "</td></tr>"; 
} 

myTable+="</thead></table>"; 

document.getElementsByClassName('body').innerHTML = myTable; 

誰能告訴我,爲什麼.innerHTML =只是輸出我的表中的文本形式的安慰,而不是寫我的表頁面?

+0

您確定您正在嘗試使用類體設置元素的html,而不是文檔的元素?很可能你在控制檯中看到一個異常。嘗試document.body.innerHTML = myTable – Dimitri

+0

你真的是指getElementsByClassName或getElementsByTagName?或檢查Dimitri評論。 – glenn

回答

2

改爲使用querySelector來獲得第一個body類,這似乎是你想要的。

document.querySelector('.body').innerHTML = myTable; 

否則你設置集合的.innerHTML屬性返回,而不是一個特定的元素。


此外,你可以使用模板字符串來使這個更好。

var doc = top.frames['bsscright'].document; 
var titleArray = doc.getElementsByTagName('dt'); 
var descArray = doc.getElementsByTagName('dd'); 

var myTable = "<table><thead><tr><th>Index</th><th>Item Name</th> 
<th>Description</th></tr></thead><tbody>"; 

for (var i = 0; i < titleArray.length; i++) { 
    myTable += `<tr><td>${i}</td> 
        <td>${titleArray[i].textContent}</td> 
        <td>${descArray[i].textContent}</td></tr>`; 
} 

document.querySelector('.body').innerHTML = myTable+"</thead></table>"; 
+0

OP可能甚至只想'querySelector('body')'(沒有類,因爲誰向?添加了一個名爲'body'的類) – Andy

+1

@Andy:是的。那裏有些古怪。如果是這樣,'document.body'也可以。 – spanky

相關問題