所有其他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... });
如果需要将事件处理程序附加到未来的DOM节点,可以使用jQuery .live() ,否则,可以使用livequery插件。
例:
$(".nodes").livequery(function () { // do something with the nodes }
它将使用类.nodes
为所有当前和未来节点调用提供的匿名函数
问题是在对象在页面上之前尝试声明一个变量来存储jQuery对象。 将这些声明移动到仅在$(window).load之后绑定的click事件之后执行的代码块中解决了问题。
谢谢大家的提示!
如果另一个脚本完全在load事件中执行,则可以向同一事件添加处理程序并将代码放入setTimeout
调用(延迟为1
),这将强制您的代码在下一个中断期间执行。