2009-03-02 138 views
1

什麼是在IE中將X行插入表格的最佳普通javascript方式。在表格中插入行

表HTML如下:

<table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table> 

我需要做的,是刪除舊體,並插入一個新的有1000行。我有1000行作爲javascript字符串變量。

問題是IE中的表沒有innerHTML函數。我見過很多黑客可以做,但我想看看你最好的一個。

注意:使用jQuery或任何其他框架不計算在內。

回答

6

這裏是由傢伙一個偉大的文章,誰執行IE的innerHTML=how he got IE to do tbody.innerHTML="<tr>..."

起初,我認爲IE是不是 能夠執行重繪與innerHTML的 修改的表,但 後來我記得我是 負責這個限制!

順便說一句,他使用的伎倆是基本上所有的框架是如何做到這一點的table/tbody元素。

編輯:@mkoryak,你的評論告訴我你沒有想象力,也不值得回答。但無論如何,我會幽默的。你的觀點:

>他是不是將我需要

什?他將行(他作爲html字符串)插入到table元素中。

>他還使用一個額外的隱藏元素

該元素的要點是要說明,所有IE需要的是「背景」。您可以使用動態創建的元素(document.createElement('div'))。

>,也是文章是老

我不會再幫助你;)

但嚴重的是,如果你想了解其他人如何實現它,看看jQuery的源jQuery.clean()或Prototype的Element._insertionTranslations

+0

哈哈哈,我今天剛讀到這個!這是一個很好的閱讀。用於reddit的Hooray。 :D – 2009-03-02 22:38:26

0

像jQuery那樣做,例如。在它周圍添加<table></table>,插入到文檔中,並將所需的節點移動到您想要的位置,然後消除temp元素。

0

代碼結束了這一點:

if($.support.scriptEval){ 
    //browser needs to support evaluating scripts as they are inserted into document 
     var temp = document.createElement('div'); 
    temp.innerHTML = "<table><tbody id='"+bodyId +"'>"+html; 
    var tb = $body[0]; 
    tb.parentNode.replaceChild(temp.firstChild.firstChild, tb); 
    temp = null; 
    $body= $("#" + bodyId); 
    } else { 
    //this way manually evaluates each inserted script 
     $body.html(html); 
    } 

東西齋事先存在:具有體「bodyId」的ID的表。 $ body是一個全局變量(或者函數有一個閉包),並且在那裏也有一些jquery,因爲IE不會評估插入到html中的腳本。

0

我遇到了同樣的問題(和很多其他人一樣),經過大量的遊戲工作後,我得到了工作。

你必須通過document.createelement('tr')創建一個tr,然後以同樣的方式創建一個td。 將tr附加到tr,appendchild tr到tbody(不是表)然後你可以innerhtml你創建的td,它會起作用。 這是ie8我正在使用。基本上,表結構必須由createelement創建,但其餘部分可以是innerHTMLed。我在IE8調試器中這樣做,它會說它會添加它(如果我做了tr.innerhtml =「blah」)並且沒有錯誤,但它不會顯示,並且html dom視圖顯示非常破碎表(沒有td曾經出現,但/ td)

所以當最後我通過createelement調用完成tr和td時,它創建了一個正確的外觀並正確地繪製了頁面。