所有其他JS执行后运行jQuery

时间:2011-03-31 02:39:29

标签: javascript jquery dom dynamic

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

5 个答案:

答案 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...
});

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

答案 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),这将强制执行你的代码在下一次休息时执行。