2013-03-01 55 views
5

在Internet Explorer中此行document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML = document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML + string;附加表是給我一個SCRIPT600: Invalid target element for this operation. …character 10IE:無效的目標元素 - 使用的innerHTML +字符串

的字符串很簡單,它包含了一組tablerows的。這適用於Chrome,Safari或Firefox。有沒有更好的方法來做到這一點?我正在做的是一旦用戶到達頁面的底部,我將tablerows附加到表中以加載更多內容。這是一種AJAX無限滾動類型的交易 - 客戶端請求。我正在使用Javascript,並希望在此時使用Javascript,而不是僅僅爲了這個任務而改用jQuery。

更新也同樣有:document.getElementById("left").innerHTML = document.getElementById("left").innerHTML + string; 此外,左邊是<table id="left">

+5

您不能在IE中設置表,表節或錶行元素的innerHTML。您可以使用innerHTML來編寫整個表格,或僅使用單元格的內容。使用DOM方法。 PS。 Ajax「無限滾動」頁面是一種寵物仇恨,因爲它們存在嚴重的可用性問題。 – RobG 2013-03-01 00:38:55

+0

@RobG我認爲你的建議(你的前兩個句子似乎有衝突)是我剛剛嘗試的:用innerHTML重寫整個表。其次,我相信我正在使用DOM方法。你是說我必須通過DOM創建額外的行,而不是一個字符串?最後,無限滾動是客戶端請求。 – michaellindahl 2013-03-01 00:44:14

+0

@RobG我試圖用DOM寫出代碼,但'newLink.onclick = function(){toggleVote()};'不想聽我說。 @KernelJames有一個很好的解決方案。你會同意嗎? – michaellindahl 2013-03-01 01:30:06

回答

4

是的,你需要先包裝他們是這樣的:

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

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

+1),但tbody **標籤**是可選的,因此不是必需的(少於類型)。tbody **元素**是必需的,因此將默認生成。 – RobG 2013-03-01 05:52:11

0

方式略有不同,因爲當你需要插入一個表格排在表格的末尾。您的新代碼,例如一個新的<tr>,應該在名爲html的變量中。

if (document.attachEvent) { //if using old IE 
    var currentTable = document.querySelector("#myTable"); 
    var currentTableHTML = currentTable.outerHTML; 

    //replace closing tag with new code + closing tag 
    currentTableHTML = currentTableHTML.replace("</tbody>", html + "</tbody>"; 

    currentTable.parentNode.removeChild(currentTable); 

    //reinsert the table before some other element - you can use something else if you have a container for the table 
    document.querySelector("#someElement").insertAdjacentHTML("beforebegin", currentTableHTML); 
} 
else { 
    //use insertAdjacentHTML in a normal browser 
}