Javascript 是否有一种编程方法可以知道jQuery的DOM更新何时完成?

Javascript 是否有一种编程方法可以知道jQuery的DOM更新何时完成?,javascript,jquery,dom,Javascript,Jquery,Dom,例如: var $myContainer = $('#myContainer'); $myContainer.html(someHtml); var width = $myContainer.height(); var height = $myContainer.height(); 如果#myContainer是一个空div,那么宽度和高度仍然为零。解决方案是使用超时: var $myContainer = $('#myContainer'); $myContainer.html(someHt

例如:

var $myContainer = $('#myContainer');
$myContainer.html(someHtml);
var width = $myContainer.height();
var height = $myContainer.height();
如果#myContainer是一个空div,那么宽度和高度仍然为零。解决方案是使用超时:

var $myContainer = $('#myContainer');
$myContainer.html(someHtml);
setTimeout(function () {
    var width = $myContainer.height();
    var height = $myContainer.height();
}, 500);

然而,我不喜欢里面的神奇数字。如果它是一个非常慢的浏览器呢?有没有可靠的跨浏览器方法可以告诉我浏览器何时呈现了更改?

感觉像是黑客攻击,但可能会奏效:将脚本元素作为最后一个元素添加到DOM中。所有浏览器都应该在所有其他元素“解决”后执行该操作。

感觉像是一种黑客行为,但可能会起作用:将脚本元素作为最后一个元素添加到DOM中。所有浏览器都应该在所有其他元素“解决”后执行该操作。

您可以可靠地使用
0
进行超时。它实际上不会是0毫秒,你知道,大多数浏览器会使它至少达到5或10毫秒,但只要向浏览器屈服就足够了


这就是说,我是一个不会立即获得(新的)正确高度的浏览器,没有任何收益(甚至IE6!)。但是,如果根据标记等,有一个…

可以可靠地使用
0
作为超时,我也不会感到惊讶。它实际上不会是0毫秒,你知道,大多数浏览器会使它至少达到5或10毫秒,但只要向浏览器屈服就足够了

这就是说,我是一个不会立即获得(新的)正确高度的浏览器,没有任何收益(甚至IE6!)。但是,如果根据标记等,有一个…

您在使用ajax吗

因此可以使用jQuery“load”

var $myContainer = $('#myContainer');
$myContainer.load('/url/for/someHtml', function(){
  var width = $myContainer.height();
  var height = $myContainer.height();
});
你在使用ajax吗

因此可以使用jQuery“load”

var $myContainer = $('#myContainer');
$myContainer.load('/url/for/someHtml', function(){
  var width = $myContainer.height();
  var height = $myContainer.height();
});

今天我回去用零测试了超时代码,它成功了。我把这归因于这周我有了一台新的工作电脑,速度快得多。对于我的旧机器,我需要至少100毫秒的超时。你有一台速度快的机器吗?@Sprintstar:是的,但我认为像
height
这样的功能没有什么区别。Ajax(在其他注释中引用)将是一个完全不同的问题,唯一可靠的处理方法是回调。我在单核Atom上网本上使用了
setTimeout
技巧和
0
。上面的更新在我手机上的Safari上立即更新(甚至不等待超时),这可能是我最慢的机器(并不是说它很慢)。第一步是在高度没有立即更新(我还没有更新)的情况下找到一个浏览器,然后看看是否需要高于
0
的任何东西。今天我回去用零测试超时代码,结果成功了。我把这归因于这周我有了一台新的工作电脑,速度快得多。对于我的旧机器,我需要至少100毫秒的超时。你有一台速度快的机器吗?@Sprintstar:是的,但我认为像
height
这样的功能没有什么区别。Ajax(在其他注释中引用)将是一个完全不同的问题,唯一可靠的处理方法是回调。我在单核Atom上网本上使用了
setTimeout
技巧和
0
。上面的更新在我手机上的Safari上立即更新(甚至不等待超时),这可能是我最慢的机器(并不是说它很慢)。第一步是在高度没有立即更新(我还没有更新)的情况下找到一个浏览器,然后查看是否需要
0
以上的内容。我使用的是ajax,但没有使用load(如果可能的话,我现在使用)。然而,我现在无法测试这一点(见我的其他评论)。它使用与.html()相同的innerHTML方法,因此我不确定这是否会有任何不同。如果您使用的是ajax,我认为没有理由不使用.load(),这会在加载内容后立即回调。如果我理解你的意图,我使用的是ajax,但没有使用load(如果可能的话,我现在就是这样)。然而,我现在无法测试这一点(见我的其他评论)。它使用与.html()相同的innerHTML方法,因此我不确定这是否会有任何不同。如果您使用的是ajax,我认为没有理由不使用.load(),这会在加载内容后立即回调。如果我能理解你的意图。