2013-03-01 6 views
5

im Internet Explorer mit dieser Linie document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML = document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML + string; gibt mir eine SCRIPT600: Invalid target element for this operation. …character 10IE: Ungültige Zielelement - Anfügen Tabelle innerHTML- + String

Der String ist einfach das, was eine Reihe von TableRows enthält. Dies funktioniert in Chrome, Safari oder Firefox einwandfrei. Gibt es einen besseren Weg, dies zu tun? Was ich tue, ist, sobald der Benutzer auf den unteren Rand der Seite kommt, ich angehängt Tabellen in die Tabelle, um mehr Inhalt zu laden. Es handelt sich um eine Art von AJAX-Scroll-Art mit Endlos-Scrolling - Client angefordert. Ich benutze Javascript und würde es vorziehen, zu diesem Zeitpunkt bei Javascript zu bleiben und nicht nur für diese Aufgabe zu jQuery zu ändern.

-Update auch das gleiche mit: document.getElementById("left").innerHTML = document.getElementById("left").innerHTML + string; Auch links <table id="left">

+5

Sie können die innerHTML einer Tabelle, eines Tabellenabschnitts oder eines Tabellenzeilenelements in IE nicht festlegen. Sie können innerHTML verwenden, um eine ganze Tabelle oder nur den Inhalt einer Zelle zu schreiben. Verwenden Sie DOM-Methoden. PS. Ajax-Seiten mit "unendlichem Scrollen" sind ein Haß, da sie ernste Usability-Probleme haben. – RobG

+0

@RobG Ich denke, was Sie vorschlagen (Ihre ersten beiden Sätze scheinen sich zu widersprechen) ist, was ich gerade versucht habe: die gesamte Tabelle mit innerHTML umzuschreiben. Zweitens glaube ich, dass ich DOM-Methoden verwende. Willst du damit sagen, dass ich die zusätzlichen Zeilen über das DOM und nicht eine Zeichenkette anlegen muss? Endlich wird das unendliche Scrollen vom Client angefordert. – michaellindahl

+0

@RobG Nun, ich habe versucht, den Code alle im DOM schreiben, aber 'newLink.onclick = function() {toggleVote()};' wollte nicht auf mich hören. @KernelJames hat eine großartige Lösung. Würdest du zustimmen? – michaellindahl

Antwort

4

Ja Sie sie müssen zuerst wickeln wie folgt aus:

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

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

+1 aber die tbody ** tags ** sind optional also nicht notwendig (weniger zu tippen). Das tbody ** element ** ist obligatorisch und wird standardmäßig erzeugt. – RobG

0

etwas andere Weise, wenn Sie eine Tabelle einfügen müssen Reihe am Ende der Tabelle. Ihr neuer Code, z.B. eine neue <tr>, sollte in der Variablen html sein.

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 
}