在骨干的渲染功能中,
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可用?
答案 0 :(得分:3)
那是因为该元素尚未添加到文档中。 DOM可用,但元素不在其中。
setTimeout
调用使浏览器在不忙于运行代码时调用代码,并且在渲染完成且元素已添加到文档时发生。
如果你在jQuery调用中使用元素作为作用域,它将找到div,尽管它不在文档中:
console.log($('#customID', this.$el)[0]);
或:
console.log(this.$el.find('#customID')[0]);