doc.ready()和parseHtml

时间:2013-10-07 20:20:57

标签: javascript jquery ajax

所以当通过ajax检索一些html并使用.html(parseHtml(result,true));将其插入页面时,似乎就是执行结果中的javascript而不考虑doc.ready。

我猜这是因为父页面本身已经“准备就绪”,并且没有HTML片段+脚本通过parseHtml插入页面的ready事件的概念/实现。

我测试了这个。通常你会期望输出为1,3,2,因为doc ready会在最后出现,但我得到的输出是1,2,3。可能纯属巧合。

console.log('1');

$(document).ready(function () {
    console.log('2');
});
console.log('3');

有些代码在doc.ready中无法正常工作以初始化一个tinyMce编辑器,但是如果我对它进行500毫秒的延迟来伪造等待doc.ready,它就能正常工作。因此,在将新的html集成到DOM中之前,javascript运行得太早似乎是一个问题。显然这个setTimeout是一个无法一致工作的黑客。

所以我的问题是:

.html($。parseHtml是否尊重doc.ready在结果中,因为它等待新的html在DOM中准备好运行该脚本? 是否有其他方法在ajax html结果中包含脚本并让它等待直到添加的html在dom中“准备好”?

1 个答案:

答案 0 :(得分:1)

来自documentation

  

如果在初始化DOM之后调用.ready(),则会立即执行传入的新处理程序。

请注意,这通常指的是DOM。当您稍后使用AJAX加载其他元素时,DOM仍处于初始化状态,因此上述情况适用。

如果使用.load()加载包含<script>元素的HTML,我相信所有脚本都会在其他元素添加到DOM后执行。因此,不需要在这些脚本中使用$(document).ready(),但这样做应该没有任何害处。