在IE中将X行插入表格的最佳普通javascript方式是什么。
表格html如下所示:
<table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table>
我需要做的是丢弃旧体,然后插入一个1000行的新体。我有1000行作为javascript字符串变量。
问题是IE中的表没有innerHTML函数。我见过很多黑客,但我希望看到你最好的一个。
注意:使用jquery或任何其他框架不计算在内。
答案 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并正确地绘制了页面。