Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在执行所有其他JS之后运行jQuery_Javascript_Jquery_Dom_Dynamic - Fatal编程技术网

Javascript 在执行所有其他JS之后运行jQuery

Javascript 在执行所有其他JS之后运行jQuery,javascript,jquery,dom,dynamic,Javascript,Jquery,Dom,Dynamic,在过去,我使用$(window).onload在其他脚本加载后运行代码块。在这种情况下,我无法更改JS文件的加载顺序,我所关心的代码需要操作DOM节点,这些节点由另一个加载到页面下方的JS文件动态插入。这两个脚本都位于文档底部附近。有人对这种情况有什么建议吗?如果另一个脚本完全在加载事件中执行,您可以向同一事件添加一个处理程序,并将代码放入setTimeout调用(延迟1),这将迫使您的代码在下一个中断期间执行。如果您知道需要哪些元素,您可以使用setInterval轮询DOM以查看它们何时被插

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

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

如果您知道需要哪些元素,您可以使用
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,否则可以使用plugin

例如:

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

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

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


不过,谢谢大家的提示

另一个脚本究竟是如何执行的?它使用AJAX吗?对于这样的函数,使用document.getElementById('foo')效率更高。
document.getElementById
确实更高效,但是jQuery的原始性能并没有被使用。它还针对这种简单的选择器进行了优化。更重要的是:两者之间没有明显的区别,因为此函数将以相对缓慢且固定的速率执行。