1

在 IE 中将 X 行插入到表中的最佳纯 JavaScript 方法是什么。

表格 html 如下所示:

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

我需要做的是删除旧正文,然后插入一个 1000 行的新正文。我有我的 1000 行作为 javascript 字符串变量。

问题是IE中的table没有innerHTML函数。我见过很多黑客来做到这一点,但我想看看你最好的。

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

4

4 回答 4

6

这是实施 IE 的人写的一篇很棒的文章,innerHTML=介绍了他如何让 IE 去做tbody.innerHTML="<tr>..."

起初,我认为 IE 无法对带有 innerHTML 的已修改表格执行重绘,但后来我想起了我对这个限制负责!

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

编辑:@mkoryak,你的评论告诉我你的想象力为零,不值得回答。但无论如何我都会取笑你。你的观点:

> 他没有插入我需要的东西

世界卫生大会?他正在将行(他作为 html 字符串)插入到table元素中。

> 他还使用了一个额外的隐藏元素

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

> 而且文章很旧

我再也不会帮助你了;)

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

于 2009-03-02T22:37:34.890 回答
0

像 jQuery 那样做,例如。添加<table></table>围绕它,插入文档并将您想要的节点移动到您想要它们的位置并丢弃临时元素。

于 2009-03-02T22:28:36.113 回答
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 中的脚本。

于 2009-03-03T15:29:01.463 回答
0

我遇到了同样的问题(和很多其他人一样),在玩了很多之后,这就是我要工作的地方。

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

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

于 2011-12-10T16:38:05.177 回答