【发布时间】:2010-11-10 03:50:21
【问题描述】:
我有一个网页。加载此网页时,我想执行一些 JavaScript。此 JavaScript 使用 JQuery。但是,似乎在加载页面时,jQuery 库还没有完全加载。因此,我的 JavaScript 无法正常执行。
有哪些最佳实践可以确保在执行 JavaScript 之前加载 jQuery 库?
【问题讨论】:
标签: javascript jquery
我有一个网页。加载此网页时,我想执行一些 JavaScript。此 JavaScript 使用 JQuery。但是,似乎在加载页面时,jQuery 库还没有完全加载。因此,我的 JavaScript 无法正常执行。
有哪些最佳实践可以确保在执行 JavaScript 之前加载 jQuery 库?
【问题讨论】:
标签: javascript jquery
jQuery 库应该包含在页面的 <head> 部分中:
<script src="/js/jquery-1.3.2.min.js" type="text/javascript"></script>
你自己的代码应该在这之后。 JavaScript 是线性同步加载的,只要按顺序包含脚本就不用担心了。
要让你的代码在 DOM 完成加载后执行(因为在这种情况发生之前你不能真正使用很多 jQuery 库),这样做:
$(function () {
// Do stuff to the DOM
$('body').append('<p>Hello World!</p>');
});
如果您正在混合 JavaScript 框架并且它们相互干扰,您可能需要像这样使用 jQuery:
jQuery(function ($) { // First argument is the jQuery object
// Do stuff to the DOM
$('body').append('<p>Hello World!</p>');
});
【讨论】:
可能有两个问题。首先,您需要确保在使用它的任何脚本之前包含 jQuery。如果您在部分中嵌入了 javascript,这可能会很棘手。如果您在标题中加载 jQuery,而在正文末尾的脚本块中加载所有其他脚本,则可以确保在您的其他代码之前加载 jQuery。我尝试将所有内容放在正文的末尾,jQuery 是第一个加载的脚本。
其次,您需要确保 DOM 已完全加载,然后再尝试在脚本中使用它。 jQuery 为此提供了一个现成的方法。将您的代码包装在 ready 方法中,您可以(更)确定 DOM 可供您使用。并非所有图像都可以加载,但您应该可以接受大多数其他内容。对于图像,如果这对您的代码至关重要,您可能需要更加努力地确保它们已加载。
<script type='text/javascript' src='.../path-to-jquery/jquery.js'></script>
$(document).ready( function() {
...your code here...
});
或(简写)
<script type='text/javascript' src='.../path-to-jquery/jquery.js'></script>
$(function() {
... your code here...
});
【讨论】:
一般来说,您只需在 jquery 中使用以下基本的“文档加载”测试。直接来自beginners jquery tutorial:
$(document).ready(function() {
// do stuff when DOM is ready
});
我能想到为什么这不起作用的任何原因,肯定有数百万个使用 jquery 的站点正是依赖于这段代码。
【讨论】:
当浏览器遇到script 元素时,它会阻塞,这意味着只要你有一个script 元素来加载jQuery在任何想要使用jQuery 的脚本之前,你应该没问题,例如
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
// jQuery is available
$(document).ready(function(){
// ...
});
</script>
有关此主题的其他评论,请参阅 JavaScript Load Order。
【讨论】:
已经有几个答案,每个都很好用,但都依赖于确保 jQuery 在任何依赖项尝试使用它之前同步下载。这种方法非常安全,但它也可能导致效率低下,因为在下载和解析 jQuery 库脚本时无法下载/运行其他资源。如果您使用嵌入式标签将 jQuery 放在头部,用户浏览器将在下载和处理 jQuery 时处于空闲状态,而它可能正在执行其他操作,例如下载图像、下载其他脚本等。
如果您希望在启动时快速响应,那么每一毫秒都很重要。
在过去一年左右的时间里,Steve Souders 给了我很大的帮助,他先是在雅虎,现在在谷歌。如果您有时间,请查看他的幻灯片 Even Faster Web Sites 和 High Performance Web Sites。优秀。如需大意,请在此处继续。
在将 javascript 文件附加到 DOM 时,发现在文档的
中放置内联【讨论】:
elmScript .src 和elmScript .type 中有一个不需要空格的错字。)
$ 被另一个 javascript 库使用,请确保将其替换为 jQuery。