Jquery append()是否异步运行?

我已经看到了一些post( 假设立即附加 ),其中有相互矛盾的接受答案。 我们使用的是JQuery 1.4 ( http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js ),而append()似乎是异步的,这样:

编辑以在AJAX回调的上下文中显示代码

... var message = $.ajax({ type: "GET", url: "/getVolumes/" + _Id, async: false }).responseText; if (parseInt(message) != 0){ var $results = $(message); $MAIN_DIV.append($results); retrieveTargets(); } ... function retrieveTargets(){ var $targets = $(".resultTargets"); } 

按预期执行并创建页面,但目标查询在运行时不产生任何内容。 在JS控制台中运行相同的代码会按预期检索元素。

如果这是JQuery中的预期行为,那么等待追加完成的正确方法是什么?

所有评论都有助于追踪这一点。 我在控制台里跟着一只红鲱鱼。 问题不在于同步性,而在于下一行:

 $targets.each( function(){ ... this.html(); ... 

需要

 $(this).html(); 

简而言之,每个人都是正确的。 Jquery append()同步运行。

如果在append后事情不起作用,请尝试这样做。

 $('#dynamic-container').append() ; setTimeout(function() { ...code which addresses elements inside #dynamic-container... },0) ; 

更多细节:

  • 显然append是同步的
  • 显然DOM不会同步更新,尤其是在谷歌浏览器中,我在尝试检索append后的div高度时遇到了这个问题
  • 我的假设是有异步更新的浏览器更新线程,下面有更多的评论,仍然不清楚如何工作,但解决方案适用于我的所有情况。