我正在阅读一个在线教程,该教程说明<script></script>
是否在</body>
之上,$(document).ready
是不必要的b / c文件已经加载。< / p>
Q1&GT;这是真的吗?
Q2&GT;
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script src="jquery.viewport.min.js"></script>
<script>
$(window).scroll(function() { // this line will track all mouse scroll event
});
</script>
$(窗口)是什么意思?这是一个jquery选择器吗?如果是,那么之前的声明看起来是正确的,因为我们不必将其包含在
中$(document).ready(function() {
});
Q3&GT;为什么我们在这里使用$ link?为什么我们选择使用$link
而不是var link?
<script>
$(window).scroll(function() {
$link = $('nav a[hash=#first]');
$link.addClass('selected');
});
</script>
谢谢
答案 0 :(得分:2)
这不正确。如果它是在身体之后是正确的。您可以查看更多信息和方法http://encosia.com/2010/08/18/dont-let-jquerys-document-ready-slow-you-down/
答案 1 :(得分:2)
Q1。是的,不是。也许jQuery在到达之后仍然会做一些事情,但是如果你只是想找到一个先前在主体中加载的元素,它将起作用。
Q2。它创建一个指向窗口的jQuery对象。它不是jQuery Selector,也不是$(document)或$(document.body) - 在这些中你将节点传递给jQuery而不是Selector。
Q3。它缓存它。通过执行$link = $('nav a[hash=#first]');
,我们将结果缓存/分配给$ link,就像我们执行$('nav a[hash=#first]')
两次一样,然后jQuery必须两次找到该结果 - 如果你所有的调用都会变得非常密集没有缓存。您还应该使用var $link = $('nav a[hash=#first]');
,以确保$link
未在全局定义 - 因为这是不好的(由于可变冲突)。
作为一般做法;任何使用DOM元素的东西应该在文档准备好之后(以确保它们已经加载并且jQuery已经准备好使用它们),任何不应该的东西(因为不需要等待)。
答案 2 :(得分:1)
Q1 排序为true。详细信息位于api doc:
虽然JavaScript在呈现页面时提供了用于执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。 ...当使用依赖于CSS样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。
使用.ready()在关闭正文标记之前(或之后)插入代码并且不通常可以正常工作,因为当浏览器的解析器到达正文末尾时,dom就完成了足够你可以开始使用选择器等。
Q2 “窗口”是object exposed by the browser;它是DOM的一部分,但不需要以.ready(function(){})样式引用它,因为正在加载的HTML不会以任何方式更改该对象以影响其.scroll事件。