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

表格html如下所示:

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

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

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

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

有帮助吗?

解决方案

以下是如何实施IE innerHTML=的人的精彩文章他让IE做tbody.innerHTML="<tr>..."

  

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

顺便提一下,他使用的技巧基本上是所有框架都为table / tbody元素做的。

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

GT <!>;他没有插入我需要的东西

什?他将行(他有一个html字符串)插入document.createElement('div')元素。

GT <!>;他还使用了额外的隐藏元素

该元素的要点是说明所有IE需求都是<!> quot; context <!> quot;。您可以使用动态创建的元素(jQuery.clean())。

GT <!>;这篇文章也很旧了

我再也没有帮你;)

但严重的是,如果您想了解其他人是如何实现它的,请查看 Element._insertionTranslations ,或Prototype的 <=>

其他提示

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

代码最终是这样的:

    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中的脚本。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top