Javascript 在使用jQuery offset()之前等待DOM更新

Javascript 在使用jQuery offset()之前等待DOM更新,javascript,jquery,dom,Javascript,Jquery,Dom,我有一个显示隐藏元素的代码,然后得到它的大小: var div = $('div.foo').show(); // Was hidden. // Need to wait until the DOM is updated to get its offset setTimeout(function() { var offset = div.offset(); bar(offset.top, offset.left); }, 0); 是否有更干净的方法来执行此操作,而不是使用se

我有一个显示隐藏元素的代码,然后得到它的大小:

var div = $('div.foo').show(); // Was hidden.

// Need to wait until the DOM is updated to get its offset
setTimeout(function() {
    var offset = div.offset();
    bar(offset.top, offset.left);
}, 0);
是否有更干净的方法来执行此操作,而不是使用
setTimeout
0
延迟调用
div.offset()
,或者这是最佳做法?我可以绑定执行一些DOM更新事件或其他操作吗?

在不传递持续时间参数的情况下调用
.show()
是一个同步操作,因此不需要设置超时。从:

如果没有参数,
.show()
方法是显示元素[…]的最简单方法

匹配的元素将立即显示,没有动画。这大致相当于调用
.css('display','block')
,只是display属性恢复为最初的状态

但是,如果指定了持续时间,则可以传递回调函数,该函数将在动画完成时执行:

var div = $('div.foo').show(400, function() {
    var offset = $(this).offset();
    bar(offset.top, offset.left);
});

如果不将持续时间传递给
.show()
,则这将是一个同步操作,不需要设置超时时间。很好的观察。因此,我想,在我让DOM更新之前,
offset()
不起作用的事实意味着还有其他问题。是的,请执行一些
console.log
ing,您将看到值是正确的。这可能与您的
bar
函数和/或您执行操作的顺序有关(通常是这样),当您针对单独的问题提出另一个问题时,我会看看这个问题<代码>=]谢谢@fabriciomatté!