在尝试确定页面加载20秒的原因时,我在IE8中发现了一些奇怪的行为.
情景是这样的.
我做了一个ajax调用,它返回并且回调看起来像这样
$("#StoreDetailsContainer").html($(tableHtml));
var StoreDetailsTable = $("#StoreDetailsTable");
StoreDetailsTable.tablesorter({ sortList: [[0, 0]], cssChildRow: "SubTable" });
StoreDetailsTable.filtertable({ cssChildRow: "SubTable" });
Run Code Online (Sandbox Code Playgroud)
但是,这段代码需要20秒才能完成.
我正在乱搞,计时,并在方法之间弹出警报,突然间,只用了6秒钟.我玩了一下,发现如果我在.html()调用之后引入延迟,并且在我尝试操作DOM之前,页面渲染速度更快.它现在看起来像这样
$("#StoreDetailsContainer").html($(tableHtml));
window.setTimeout(function() {
var StoreDetailsTable = $("#StoreDetailsTable");
StoreDetailsTable.tablesorter({ sortList: [[0, 0]], cssChildRow: "SubTable" });
StoreDetailsTable.filtertable({ cssChildRow: "SubTable" });
}, 100);
Run Code Online (Sandbox Code Playgroud)
尽管在该过程中添加了额外的1/10秒,它也只需要6秒.
我的理论是,因为.html()在尝试使用它之前,IE没有通过调用完全呈现给屏幕,所以会发生某种锁定.
有没有办法确定IE何时完成渲染添加到DOM的内容.html()所以我不需要在setTimeout调用中使用任意值?