2009-03-02 121 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时,它创建了一个正确的外观并正确地绘制了页面。