Javascript jQuery文档准备就绪是否会等待通过主干动态注入html元素?

Javascript jQuery文档准备就绪是否会等待通过主干动态注入html元素?,javascript,jquery,backbone.js,single-page-application,document-ready,Javascript,Jquery,Backbone.js,Single Page Application,Document Ready,我的代码是一个插入SPA的JS模块,我无法控制它的代码。此SPA使用主干从模板动态加载HTML元素。其中一个元素是我在代码中需要的div。我正在jQuery的文档ready中查找它 $(document).ready(function() { if($( "#myDivId" )[0] != undefined) { console.debug("Found it"); } else { console.debug("D'OH!"); } }); 有

我的代码是一个插入SPA的JS模块,我无法控制它的代码。此SPA使用主干从模板动态加载HTML元素。其中一个元素是我在代码中需要的div。我正在jQuery的文档ready中查找它

$(document).ready(function() {
    if($( "#myDivId" )[0] != undefined) {
      console.debug("Found it");
   } else {
      console.debug("D'OH!");
   }
});
有时我找到那个div,有时我找不到。这让我相信DOM ready并不总是等待主干。你能证实这一点吗


如果是这种情况,那么是否有其他事件处理程序可以将代码放在始终可以找到主干动态插入的HTML的位置?

回答您的问题:不,document ready不等待主干。我可以证实这一点

是否有其他事件处理程序可以将代码放在始终可以找到主干动态插入的HTML的位置

是-如果视图创建了自己的元素,在将视图添加到DOM之后,您就知道它在DOM中。主干网不能做到这一点,您是将其添加到DOM的人,这样您就知道何时可以做到这一点

若您的视图指向DOM中的一个现有元素,那个么该元素已经在DOM中,您可以在视图中执行任何您想要的操作


关键是——是你控制什么时候东西被添加到DOM以及什么时候从DOM查询东西。

正如Korgrue和其他人所确认的,jQuery ready函数不能依赖于告诉我什么时候主干被插入DOM,所以正如Korgrue所建议的,我的解决方案是拥有自己的init()主干应用程序在完成向DOM添加div时可以调用的函数。通过这种方式,我可以确保我需要的div始终在那里。

我认为,如果您没有找到div,那么可以安全地假设它有时没有等待它。我不用脊梁,但你可以给。上一枪,看看是否有效。不。文档就绪在标记中定义的DOM加载后激发。它不等待异步JS库加载完成,也不等待从其他库添加任何动态JS元素。一旦主干完成了它的工作,您就可以编写自己的回调来加载jQuery init,但是如果您在加载动态元素之前尝试进行任何操作,这可能会有问题。@AbuMariam没有这样的事情。您的一个视图可能会在AJAX调用后加载另一个视图,这需要几分钟的时间,并且它可能会创建一组视图来创建另一个视图。。。等等
ready
完全取决于您的应用程序,您必须定义何时您的应用程序被视为“完成”加载内容。正如@AbuMariam所指出的,没有内置的回调功能。这是你必须写的东西。您可以将dom操纵函数放入一个
init()
函数中,在特定事件发生时调用该函数,而不是使用jqueryready函数。例如,如果您是动态地拉入内容-您可以将init()调用绑定到类似于AJAX请求的东西(这只是一个示例,因为我不知道您的代码是什么样子的,以便在已经有回调的函数上实现)。理想情况下,您希望在调用
init()之前拉入任何部分或动态内容
-而不是依赖jQuery
ready
。这将防止强制浏览器重新计算、重新定位和重新绘制屏幕,以及在尝试访问元素之前确保元素实际位于DOM中。正如我在原始问题中所说,我的代码只是插入主干应用程序(其代码是其他人的)的模块。因此,插入div的不是我的代码,而是需要读取其他人的代码放入的div。我只是想知道我是否可以依赖DocumentReady,在主干应用程序完成将内容放入DOM时通知我,但您确认我不能。谢谢你!