有没有一种程序化的方式来了解jQuery的DOM更新何时完成?

时间:2011-05-16 09:03:04

标签: javascript jquery dom

例如:

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);

然而,我不喜欢那里的神奇数字。如果它的浏览器真的很慢怎么办?是否有可靠的跨浏览器方法可以告诉我何时浏览器已呈现更改?

3 个答案:

答案 0 :(得分:1)

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

那就是说,我是not immediately finding一个浏览器,它没有立即得到(新)高度,没有收益(甚至是IE6!)。但是,如果取决于标记等,我不会感到惊讶......

答案 1 :(得分:0)

感觉像黑客但可能有效:将一个脚本元素添加到DOM作为最后一个元素。在所有其他元素都已“安定下来”之后,所有浏览器都应执行该操作。

答案 2 :(得分:0)

您使用的是ajax吗?

所以你可以使用jQuery'load'。

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