将行插入表中

时间:2009-03-02 22:22:53

标签: javascript html-table innerhtml

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

表格html如下所示:

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

我需要做的是丢弃旧体,然后插入一个1000行的新体。我有1000行作为javascript字符串变量。

问题是IE中的表没有innerHTML函数。我见过很多黑客,但我希望看到你最好的一个。

注意:使用jquery或任何其他框架不计算在内。

4 个答案:

答案 0 :(得分:6)

以下是how he got IE to do tbody.innerHTML="<tr>..."上实施IE innerHTML=的人的精彩文章:

  

起初,我认为IE不是   能够执行重绘   使用innerHTML修改表,但是   然后我记得我是   负责这个限制!

顺便提一下,他使用的技巧基本上是所有框架如何为table / tbody元素执行此操作。

编辑:@mkoryak,你的评论告诉我你没有想象力,也不值得回答。但无论如何我会幽默你。你的观点:

&GT;他没有插入我需要的东西

什?他将行(作为html字符串)插入table元素。

&GT;他还使用了额外的隐藏元素

该元素的要点是说明所有IE需求都是“上下文”。您可以使用动态创建的元素(document.createElement('div'))。

&GT;这篇文章也很旧了

我再也没有帮你;)

但严重的是,如果您想了解其他人如何实现它,请查看jQuery.clean()的jQuery源代码或Prototype的Element._insertionTranslations

答案 1 :(得分:0)

像jQuery那样做,例如。在它周围添加<table></table>,插入文档并将所需的节点移动到您想要的位置,然后抛弃temp元素。

答案 2 :(得分: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);
    }

预先存在的事物:具有id为“bodyId”的主体的表。 $ body是一个全局变量(或者函数上有一个闭包),并且还有一些jquery,因为IE不会评估在动态插入到html中的脚本。

答案 3 :(得分:0)

我遇到了同样的问题(就像很多其他人一样),经过大量的游戏后我就开始工作了。

你必须通过document.createelement('tr')创建一个tr然后以相同的方式创建一个td。 将td附加到tr,将trnd追加到t体(不是表格)然后你可以将你创建的td内部化,它将起作用。 这是我正在使用的ie8。基本上,表结构必须使用createelement创建,但其余部分可以是innerHTMLed。我在IE8调试器中看这个,它会说它会添加它(如果我做tr.innerhtml =“blah”)并且没有给出错误,但是它不会显示,并且html dom视图显示非常破坏表(没有出现过,但/ td已经出现了)

所以当我最终通过createelement调用完成tr和td时,它创建了一个正确的dom并正确地绘制了页面。