所有其他JS执行后运行jQuery

在过去,我已经使用$(window).onload在其他脚本加载后运行一段代码。 在这种情况下,我无法更改JS文件的加载顺序,而我所关注的代码需要操作由另一个在页面下方加载的JS文件动态插入的DOM节点。 两个脚本都位于文档底部附近。 有没有人对这种情况有任何建议?

如果您知道要期望的元素,可以使用setInterval轮询DOM以查看它们何时被插入。 例如,这是您可以如何轮询ID为foo的元素:

 $(window).load(function () { var i = setInterval(function () { if ($('#foo').length) { clearInterval(i); // safe to execute your code here } }, 100); }); 

即使您无法更改加载顺序,是否可以更改加载顺序?

在我确定已经完成加载之后我想加载一些javascript并执行一些代码时,我曾经使用过的一件事是jquery的$ .getScript:

 $.getScript('javascripttoload.js', function() { //do the DOM manipulation you were talking about... }); 

http://api.jquery.com/jQuery.getScript/

如果需要将事件处理程序附加到未来的DOM节点,可以使用jQuery .live() ,否则,可以使用livequery插件。

例:

 $(".nodes").livequery(function () { // do something with the nodes } 

它将使用类.nodes为所有当前和未来节点调用提供的匿名函数

问题是在对象在页面上之前尝试声明一个变量来存储jQuery对象。 将这些声明移动到仅在$(window).load之后绑定的click事件之后执行的代码块中解决了问题。

谢谢大家的提示!

如果另一个脚本完全在load事件中执行,则可以向同一事件添加处理程序并将代码放入setTimeout调用(延迟为1 ),这将强制您的代码在下一个中断期间执行。