Javascript IE 9、10、11未能呈现某个特定DIV的内容(使用JS添加)

Javascript IE 9、10、11未能呈现某个特定DIV的内容(使用JS添加),javascript,html,internet-explorer,Javascript,Html,Internet Explorer,我对IE 11和IE 10(以及IE 10和IE 9使用IE 11的兼容性渲染)有一个奇怪的问题,即一个特定的div在打开开发人员工具并单击DOM explorer中的任何标记之前不会被渲染。一旦我这样做,div内容就会立即呈现 该页面在所有版本的Chrome、Firefox和IE 5、6、7和8上都能正确呈现。[编辑:未测试IE6;通过IE11的文档呈现仿真模式测试5、7和8] 该页面经过身份验证,是使用JS生成的大部分HTML的复杂SPA客户端的一部分,服务器提供的是一个简单的大纲,其中边栏

我对IE 11和IE 10(以及IE 10和IE 9使用IE 11的兼容性渲染)有一个奇怪的问题,即一个特定的
div
在打开开发人员工具并单击DOM explorer中的任何标记之前不会被渲染。一旦我这样做,
div
内容就会立即呈现

该页面在所有版本的Chrome、Firefox和IE 5、6、7和8上都能正确呈现。[编辑:未测试IE6;通过IE11的文档呈现仿真模式测试5、7和8]

该页面经过身份验证,是使用JS生成的大部分HTML的复杂SPA客户端的一部分,服务器提供的是一个简单的大纲,其中边栏内容(包含未呈现的
div
)仅为:

<div id="Top" onclick="RpA.reload()" title="..." style="visibility: hidden; cursor: pointer;">
    <img src="images/blank.gif"/>
</div>

<div id="LibraryList">
</div>

<div id="LogoutWrapper">
    <input class="LogoutButton" type="button" value="Log out" onclick="RpA.logout();"/>
</div>
虽然JS整体上过于复杂,无法在这里发布,但它归结为通过AJAX解析细节,找到container
div
元素,然后使用以下方法注入解析的模板:

ele.innerHTML=Tpl.get("MultiSetup_Wrap").toString(stpobj,addobj);
由于块立即呈现,我尝试检查DOM,我不能完全确定,但HTML和CSS的所有内容都与我预期的完全一致,我找不到块不显示的原因

到目前为止,我似乎已经消除了计时和排序,也就是说,在页面内容生成的长序列中,我将这个特定的
div
片段放在哪里似乎并不重要,它似乎也不受客户端或服务器硬件速度的影响

关于如何从这里开始,有什么建议吗

更新1:如果我使用jQuery对元素执行延迟
show()
,它会在超时后显示(任意长度-我尝试了1100、500和1000毫秒);例如:

setTimeout(function(){$("#MultiSetup").show()},1000);

更新2:好的,所以我把这归因于封闭的
div
有CSS
显示:无在IE9+中设置,但不在Chrome、Firefox或IE8-中设置。只要我点击DOM树中的一个元素,它就会神奇地变成
display:block
。在我看来,这就像IE中的一个彻头彻尾的bug。

这是CSS选择器的结果:

#MultiSetup:empty { display: none; }
显然,当元素不再为空时,IE 9+继续应用
:empty
选择器属性,因此它保持隐藏状态。当单击DOM树中的元素时,它必须导致一些内部重新验证,然后停止应用属性


删除此选择器可以解决问题(设置innerHTML时执行显式更改也是如此)。

您使用什么代码将div放置在页面上?我还注意到一个小的打字错误
。src属性中的点太多。不过,将div放在页面上应该不会引起问题。@robert:这不是打字错误,而是省略号,我只是删除了部分路径以避免泄露公司信息。javascript控制台在IE中是否显示任何错误?如果在添加div后输出其innerHTML,即
alert(ele.innerHTML)
,该怎么办。这说明了什么吗?它似乎是自己工作的:@YuriyGalanter“该页面在所有版本的Chrome、Firefox和IE 5、6、7和8上都能正确呈现。”我之所以提到它,是因为在大多数情况下,IE旧版本的旧黑客代码破坏了不需要它的新版本。只是遇到了一个非常类似的问题,你的帖子救了我一天。在我的情况下,我们在页面上呈现许多react组件,其中一个组件在打开开发工具并刷新页面之前不会加载。不渲染任何内容而不是空div解决了这个问题。
#MultiSetup:empty { display: none; }