safari/chrome dom更新延迟上的jquery dhtml?

safari/chrome dom更新延迟上的jquery dhtml?,jquery,cross-browser,Jquery,Cross Browser,使用javascript,我创建了一些html内容——一些通过样式表设置样式的嵌套div 调用$(container.html(dhtmlString)I后,我尝试进行一些布局计算。但是,在Safari和Chrome中运行时,我从jQuery返回的值与预期值不匹配 代码: var someHtml = ...; $(".Container").html(someHtml); var containerWidth = $(".Container").width(); // properly re

使用javascript,我创建了一些html内容——一些通过样式表设置样式的嵌套div

调用
$(container.html(dhtmlString)
I后,我尝试进行一些布局计算。但是,在Safari和Chrome中运行时,我从jQuery返回的值与预期值不匹配

代码:

var someHtml = ...;
$(".Container").html(someHtml);

var containerWidth = $(".Container").width(); // properly reports 800
var nestedDivWidth = $(".NestedDiv").width(); // incorrectly reports 800
我预计NestedDiv大约为450px(这就是样式表中的内容)。在FF和IE上,这很好用,但在Safari和Chrome上却不行

我怀疑在safari/chrome中DOM的更新方式存在时间问题

当内容实际呈现到浏览器时,开发人员元素检查器会显示适当的宽度


我使用的是jquery 1.4.2(我也尝试过1.4.3),运气不好。

如果遇到这种情况,可能值得给浏览器一点时间来处理HTML更改:

var someHtml = ...;
$(".Container").html(someHtml);

setTimeout(function() {
    var containerWidth = $(".Container").width(); // properly reports 800
    var nestedDivWidth = $(".NestedDiv").width(); // incorrectly reports 800
}, 0);

这基本上使一个线程屈服于浏览器的渲染引擎。更具体地说,它会安排一个计时器尽快回调(大多数浏览器的回调速度不会超过10毫秒,但这取决于它们),这给了渲染线程(如果有的话,一些浏览器使用一个线程来处理所有事情,在这种情况下,您真的需要上述线程)一个赶上的机会。由于函数关闭了封闭范围内的任何数据,因此从编码的角度来看,在函数内而不是在函数之后执行逻辑是非常轻松的。(请注意,
setTimeout
之后的任何语句都将发生在您给
setTimeout
的函数中的代码之前;这就是将逻辑移到函数中的全部意义。)

我听起来也像是一个计时问题。是否在函数中使用$(document).ready()来确保文档已完成加载