Javascript 在表中插入行

Javascript 在表中插入行,javascript,html-table,innerhtml,Javascript,Html Table,Innerhtml,在IE中将X行插入表中的最佳纯javascript方式是什么 表格html如下所示: <table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table> 12 我需要做的是放下旧的主体,插入一个有1000行的新主体。我将1000行作为javascript字符串变量 问题是IE中的表没有innerHTML函数

在IE中将X行插入表中的最佳纯javascript方式是什么

表格html如下所示:

<table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table>
12
我需要做的是放下旧的主体,插入一个有1000行的新主体。我将1000行作为javascript字符串变量

问题是IE中的表没有innerHTML函数。我见过很多黑客做这件事,但我想看看你最好的一个


注意:使用jquery或任何其他框架都不算数

按照jQuery的方式操作,例如在其周围添加
,插入文档并将节点移动到所需位置,并丢弃临时元素。

按照jQuery的方式操作,例如在其周围添加
,插入到文档中,将节点移动到需要的位置,并丢弃temp元素。

这是一篇很棒的文章,作者是在以下位置实现IE的
innerHTML=
的:

起初,我以为IE不是 能够为以下对象执行重绘: 使用innerHTML修改了表,但是 然后我想起我是 对此限制负责

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

编辑:@mkoryak,你的评论告诉我你没有想象力,不值得回答。不过我还是会逗你的。你的观点:

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

什么?他正在将行(作为html字符串)插入
元素中

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

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

>而且这篇文章也很旧

我再也不会帮助你了;)


但是说真的,如果你想看看其他人是如何实现它的,可以看看jQuery的源代码或原型。

这里有一篇很好的文章,作者是实现IE的
innerHTML=
的:

起初,我以为IE不是 能够为以下对象执行重绘: 使用innerHTML修改了表,但是 然后我想起我是 对此限制负责

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

编辑:@mkoryak,你的评论告诉我你没有想象力,不值得回答。不过我还是会逗你的。你的观点:

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

什么?他正在将行(作为html字符串)插入
元素中

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

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

>而且这篇文章也很旧

我再也不会帮助你了;)


但说真的,如果您想了解其他人是如何实现它的,请查看jQuery的源代码或原型。

代码如下:

    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);
    }
if($.support.scriptEval){
//浏览器需要支持在脚本插入文档时对其进行评估
var temp=document.createElement('div');
temp.innerHTML=“”+html;
var tb=$body[0];
tb.parentNode.replaceChild(temp.firstChild.firstChild,tb);
温度=零;
$body=$(“#”+bodyId);
}否则{
//这种方法手动计算每个插入的脚本
$body.html(html);
}

预先存在的事物:具有id为“bodyId”的主体的表$body是一个全局变量(或者函数上有一个闭包),其中也有一点jquery,因为IE不计算动态插入html的脚本。

最后的代码是:

    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);
    }
if($.support.scriptEval){
//浏览器需要支持在脚本插入文档时对其进行评估
var temp=document.createElement('div');
temp.innerHTML=“”+html;
var tb=$body[0];
tb.parentNode.replaceChild(temp.firstChild.firstChild,tb);
温度=零;
$body=$(“#”+bodyId);
}否则{
//这种方法手动计算每个插入的脚本
$body.html(html);
}
预先存在的事物:具有id为“bodyId”的主体的表$body是一个全局变量(或者函数有一个闭包),其中也有一点jquery,因为IE不计算动态插入html的脚本。

我也遇到了同样的问题(和其他很多人一样),在反复玩了很多之后,这里是我要做的

您必须通过document.createelement('tr')创建一个tr,然后以同样的方式创建一个td。 将td追加到tr,将tr追加到tbody(不是表),然后您可以将您创建的td嵌入HTML,它将正常工作。 这是我用的ie8。基本上,表结构必须使用createelement创建,但其余部分可以使用innerHTMLed。我在IE8调试器中进行了观察,它会说它会添加它(如果我添加了tr.innerhtml=“blah”),并且不会给出错误,但是它不会显示,html dom视图显示了一个非常不完整的表(没有td显示,但是/td显示了)

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

我也遇到了同样的问题(和许多其他人一样),在玩了很多次之后,我开始工作了

您必须通过document.createelement('tr')创建一个tr,然后以同样的方式创建一个td。 将td追加到tr,将tr追加到tbody(不是表),然后您可以将您创建的td嵌入HTML,它将正常工作。 这是我用的ie8。基本上,表结构必须使用createelement创建,但其余部分可以使用innerHTMLed。我在IE8调试器中观看,它会说w