添加到DOM ie8后,Html表不会重绘

时间:2010-09-22 10:21:11

标签: javascript html internet-explorer dom

当我使用jquery向它添加输入时,IE没有重绘表格,因此我用一个大表错误地告诉我。当我向上或向下滚动表格时它会强制重绘/更新,否则它不能正确渲染输入。

<div style="overflow: auto;">
   <table>
       <tbody>
           /// lots of rows
       </tbody>
   </table>
</div>

和javascript片段:

input = $(document.createElement("input"));
input.attr("type", "text");
input.attr("value", $.trim(div.html())); 
TD.prepend(input);

这在firefox中运行得很好,但拒绝在IE8中运行。一种解决方法是强制重绘,但我似乎无法找到一种方法。

我认为ie8在怪癖模式下呈现,但它在ie8或quirks模式下都不起作用。

[编辑]

function forceIERedraw() {
    if ($.browser.msie) {
        obj = getThing();
        obj.scrollTop = obj.scrollTop - 1;
        obj.scrollTop = obj.scrollTop + 1;
    }
}

这样可行,但当然会使屏幕震动得如此轻微。可怕的黑客攻击,但至少你可以看到我添加到dom的东西。

3 个答案:

答案 0 :(得分:1)

隐藏和显示正文通常适用于像你这样的问题:

input = $(document.createElement("input"));
input.attr("type", "text");
input.attr("value", $.trim(div.html())); 
TD.prepend(input);
document.body.style.display = 'none';
document.body.style.display = 'block';

答案 1 :(得分:1)

今天我遇到了一些类似的问题,通过重新编写div的整个html来解决它。后来我在这里找到了你的问题......

让我们说你的div有一个身份stupiddiv
现在你做这样的事情:
$('#stupiddiv').html($('#stupiddiv').html());
在追加表格之后......如果你有小桌子那会很有用,但是如果你有大桌子,我想这会花费很多时间......

答案 2 :(得分:-1)

原来问题是特定于我正在工作的网站(10年前那个。)和渲染即怪异模式。基本上整件事情都是一团糟,这是页面上各种其他问题的副作用。