IE8 / 9动态插入的元素在不确定的时间内是不可见的

时间:2013-09-27 19:17:29

标签: javascript html internet-explorer internet-explorer-8 internet-explorer-9

还有其他人遇到过这个问题,并得出了满意的解决方案吗?

基本上我有一个非常复杂的Web应用程序,在IE9 Quirks模式下(目前没有可能切换doctype)通过jQuery动态插入的特定类型的元素未能充分展示自己。它参与页面布局,但元素本身不会出现

有时5秒钟后,有时甚至30秒后,有时甚至更晚,元素最终会神奇地出现。

我已经使用了F12开发工具(有和没有单击“开始调试”)它会显示有问题的元素,并且它不会显示蓝色边框指示符(因为它显然没有渲染没有渲染它的边界出现,这是合乎逻辑的)。

临时运行的解决方法是在嵌套的setTimeout()链中动态删除元素并将其重新插入。然后我必须重新安装click事件处理程序。

像这样:

if (isQuirksMode()) {                                         
    setTimeout(function() {                                   
        var parent = jqelement.parent();                        
        var removed = jqelement.remove();                       
        setTimeout(function() {                               
            parent.append(removed);                           
            removed.children('input').click(clickcallback);
        },0);                                                 
    },0);                                                     
}                                                             
jqpage.append(jqelement);

此代码将强制插入元素,从DOM中删除,然后重新插入,之后它似乎正确显示。

这样做的原因是我尝试添加和删除一个类,希望它会触发重新渲染,但这并没有改变任何行为。

我的问题是,这种行为是否能为任何人敲响任何铃声,你是否能够想出一种更便宜的方式让它表现出来?

1 个答案:

答案 0 :(得分:0)

将元素作为字符串一次性注入比将它们单独注入DOM中要快得多。

在字符串中构建 - 使用innerHTML插入。