Javascript 在执行所有其他JS之后运行jQuery
在过去,我使用$(window).onload在其他脚本加载后运行代码块。在这种情况下,我无法更改JS文件的加载顺序,我所关心的代码需要操作DOM节点,这些节点由另一个加载到页面下方的JS文件动态插入。这两个脚本都位于文档底部附近。有人对这种情况有什么建议吗?如果另一个脚本完全在加载事件中执行,您可以向同一事件添加一个处理程序,并将代码放入Javascript 在执行所有其他JS之后运行jQuery,javascript,jquery,dom,dynamic,Javascript,Jquery,Dom,Dynamic,在过去,我使用$(window).onload在其他脚本加载后运行代码块。在这种情况下,我无法更改JS文件的加载顺序,我所关心的代码需要操作DOM节点,这些节点由另一个加载到页面下方的JS文件动态插入。这两个脚本都位于文档底部附近。有人对这种情况有什么建议吗?如果另一个脚本完全在加载事件中执行,您可以向同一事件添加一个处理程序,并将代码放入setTimeout调用(延迟1),这将迫使您的代码在下一个中断期间执行。如果您知道需要哪些元素,您可以使用setInterval轮询DOM以查看它们何时被插
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的原始性能并没有被使用。它还针对这种简单的选择器进行了优化。更重要的是:两者之间没有明显的区别,因为此函数将以相对缓慢且固定的速率执行。