2013-03-01 16 views
5

kullanarak tablo ekleme bana SCRIPT600: Invalid target element for this operation. …character 10IE: Geçersiz hedef elemanı - Internet Explorer bu satır <code>document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML = document.getElementById("left").getElementsByTagName("tbody")[0].innerHTML + string;</code> yılında innerHTML + dize

dize veren basitçe tablerows kümesi içeren olmasıdır. Bu, Chrome, Safari veya Firefox'ta iyi çalışıyor. Bunu yapmanın daha iyi bir yolu var mı? Yaptığım şey, kullanıcının sayfanın altına gelmesiyle daha fazla içerik yüklemek için tabloya tablo ekliyorum. Bu bir çeşit AJAX sonsuz kaydırma türü bir anlaşma - müşteri talep etti. Javascript kullanıyorum ve bu noktada Javascript ile kalmayı ve jQuery'yi bu görev için değiştirmemeyi tercih ederim.

Update ayrıca aynı olan: Bir tablo eklemek için gereken zaman için

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

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

IE'de bir tablonun, tablo bölümünün veya tablo satırı öğesinin içHTML'sini ayarlayamazsınız. Bir tablonun tamamını veya bir hücrenin içeriğini yazmak için innerHTML'i kullanabilirsiniz. DOM yöntemlerini kullanın. PS. Ajax "sonsuz kaydırma" sayfaları, ciddi kullanım sorunları olduğundan evcil hayvanların nefretidir. – RobG

+0

@RobG Önerdiğinizi (ilk iki cümlenin çatıştığını sanıyorum) düşündüğüm şey şu: tüm masayı innerHTML ile yeniden yazmak. İkincisi, DOM yöntemlerini kullandığımı düşünüyorum. DOM yoluyla ek satırlar oluşturmam gerektiğini ve bir dizeyi değil mi gerektiğini söylüyorsun? Sonunda sonsuz kaydırma istemciden talep edilir. – michaellindahl

+0

@RobG iyi Kodu DOM'de yazmayı denedim ama 'newLink.onclick = function() {toggleVote()};' 'beni dinlemek istemedi. @KernelJames'in harika bir çözümü var. Kabul eder misin – michaellindahl

cevap

4

Evet böyle onları ilk sarmak gerekir ise tablonun sonunda satır. Yeni kodunuz, ör. Yeni bir <tr>, html adı verilen değişkende olmalıdır.

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 
} 
+1

+1 ancak tbody ** tag'leri ** isteğe bağlı değil, bu yüzden gerekli değil (yazılacak daha az) tbody ** element ** zorunludur, bu yüzden varsayılan olarak üretilecektir. – RobG

0

Biraz farklı bir şekilde: document.getElementById("left").innerHTML = document.getElementById("left").innerHTML + string; Ayrıca sol <table id="left">