过去,我已经使用$(window).onload在其他脚本加载后运行一段代码。在这种情况下,我无法更改JS文件的加载顺序,而我所关注的代码需要操作由另一个在页面下方加载的JS文件动态插入的DOM节点。两个脚本都位于文档底部附近。有没有人对这种情况有任何建议?
答案 0 :(得分:18)
如果您知道要期望的元素,可以使用setInterval
轮询DOM以查看它们何时被插入。例如,您可以通过此方式轮询ID为foo
的元素:
$(window).load(function ()
{
var i = setInterval(function ()
{
if ($('#foo').length)
{
clearInterval(i);
// safe to execute your code here
}
}, 100);
});
答案 1 :(得分:2)
即使您无法更改加载顺序,是否可以更改加载顺序?
我过去曾经使用过的一件事,我想加载一些javascript并在我确定它已经完成加载后执行一些代码是jquery的$ .getScript:
$.getScript('javascripttoload.js', function() {
//do the DOM manipulation you were talking about...
});
答案 2 :(得分:1)
如果需要将事件处理程序附加到未来的DOM节点,可以使用jQuery .live(),否则可以使用livequery插件。
示例:
$(".nodes").livequery(function () {
// do something with the nodes
}
将使用类.nodes
答案 3 :(得分:1)
问题是在对象在页面上之前尝试声明一个变量来存储jQuery对象。将这些声明移动到仅在$(window).load之后绑定的click事件之后执行的代码块中解决了问题。
感谢大家的提示!
答案 4 :(得分:0)
如果另一个脚本完全在load事件中执行,则可以向同一事件添加处理程序并将代码置于setTimeout
调用中(延迟为1
),这将强制执行你的代码在下一次休息时执行。