javascript - Backbone.js 为什么 DOM 在渲染函数中不可用?

标签 javascript dom backbone.js render

在backbone的渲染函数中,

render: function() {
    this.$el.html('<div id="customID"></div>

    console.log($('#customID')[0]);
    setTimeout(function(){
        console.log($('#customID')[0]);
    }, 1);
}

第一个 console.log 返回“undefined”...

第二个返回一个 DOM 节点。

为什么在没有超时的情况下渲染函数中的 DOM 不可用?

最佳答案

那是因为元素还没有被添加到文档中。 DOM 可用,但元素不在其中。

setTimeout 调用使浏览器在它不再忙于运行代码时调用代码,这发生在渲染完成且元素已添加到文档时。

如果您在 jQuery 调用中使用元素作为范围,它会找到 div,即使它不在文档中:

console.log($('#customID', this.$el)[0]);

或:

console.log(this.$el.find('#customID')[0]);

关于javascript - Backbone.js 为什么 DOM 在渲染函数中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992200/

相关文章:

javascript - 如何使 Youtube 上的视频不遮盖灯箱?

dom - DOM 应用程序的 CocoonJs 与 Phonegap 比较……或者只是使用 Canvas 和 CocoonJs?

javascript - 从 Promise 中提取 .then 和 .catch

javascript - 从 api 调用获取文件路径字符串后自动下载 PDF

dom - Elm 如何制作自定义事件解码器以获取鼠标滚轮移动时的鼠标 x/y 位置

javascript - 在backbone.js中切换 View 时检查未保存的更改

javascript - Marionette.CompositeView,如何将参数传递给Marionette.ItemView

javascript - Backbone 嵌套集合

javascript - 在 Symfony 2 中使用 javascript 添加选择

javascript - 基于每个包排除 NPM 依赖项