2013-03-01 10 views
5

W programie Internet Explorer Ta linia document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML = document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML + string; daje mi SCRIPT600: Invalid target element for this operation. …character 10IE: Nieprawidłowy Element docelowy - dołączenie tabeli przy użyciu innerHTML + ciąg

ciąg jest po prostu to, co zawiera zestaw tablerows. Działa to dobrze w Chrome, Safari lub Firefox. Czy jest lepszy sposób na zrobienie tego? To, co robię, to gdy użytkownik znajdzie się na dole strony Dołączam tablery do tabeli, aby załadować więcej treści. To rodzaj nieskończonej przewijania typu AJAX - zażądał klient. Używam JavaScript i wolałbym pozostać z Javascriptem w tym momencie i nie zmieniać jQuery tylko dla tego zadania.

Aktualizacja również samo z: document.getElementById("left").innerHTML = document.getElementById("left").innerHTML + string; Również lewy jest <table id="left">

+5

Nie można ustawić innerHTML dla tabeli, sekcji tabeli lub elementu wiersza tabeli w IE. Możesz użyć innerHTML do napisania całej tabeli lub tylko zawartości komórki. Użyj metod DOM. PS. Ajax "nieskończone przewijanie" stron jest nienawiścią zwierząt domowych, ponieważ mają poważne problemy z użytecznością. – RobG

+0

@RobG Myślę, że to, co sugerujesz (pierwsze dwa zdania wydają się być w konflikcie) jest tym, co właśnie próbowałem: przepisać całą tabelę z innerHTML. Po drugie, uważam, że używam metod DOM. Mówisz, że muszę utworzyć dodatkowe wiersze za pośrednictwem DOM, a nie ciąg? Wreszcie nieskończone przewijanie jest żądaniem klienta. – michaellindahl

+0

@RobG well Próbowałem napisać kod w DOM, ale 'newLink.onclick = function() {toggleVote()};' nie chciał mnie słuchać. @KernelJames ma świetne rozwiązanie. Zgodziłbyś się? – michaellindahl

Odpowiedz

4

Tak trzeba owinąć je najpierw tak:

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

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

+1 ale tagi ** są opcjonalne, więc nie są konieczne (mniej do typu). ** Element ** jest obowiązkowy, więc zostanie wygenerowany domyślnie. – RobG

0

nieco inny sposób, gdy trzeba wstawić tabelę wiersz na końcu tabeli. Twój nowy kod, np. nowy <tr> powinien znajdować się w zmiennej o nazwie 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 
} 
Powiązane problemy