题
在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并正确地绘制了页面。