jquery – $(document).ready是否必要?
我正在阅读一个在线教程,该教程说明是否在
之上,
$(document).ready
是不必要的b / c文件已经被加载。
Q1>这是真的吗?
Q2>
$(window).scroll(function() { // this line will track all mouse scroll event });
$(窗口)是什么意思? 这是一个jquery选择器吗? 如果是,那么之前的声明看起来是正确的,因为我们不必将其包括在内
$(document).ready(function() { });
Q3>为什么我们在这里使用$ link? 为什么我们选择使用$link
而不是var link?
$(window).scroll(function() { $link = $('nav a[hash=#first]'); $link.addClass('selected'); });
谢谢
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已经准备好使用它们),任何不应该的东西(因为不需要等待)。
那不对。 如果它是在身体之后是正确的。 您可以查看更多信息和方法http://encosia.com/2010/08/18/dont-let-jquerys-document-ready-slow-you-down/
Q1排序真实。 详细信息在api doc中 :
虽然JavaScript在呈现页面时提供了用于执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。 …当使用依赖于CSS样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。
在关闭正文标记之前(或之后)插入代码而不使用.ready()通常可以正常工作,因为当浏览器的解析器到达正文末尾时,dom足够完整,您可以开始使用选择器,等等
Q2 “窗口”是浏览器公开的对象 ; 它是DOM的一部分,但不需要以.ready(function(){})样式引用它,因为正在加载的HTML不会以任何方式更改该对象以影响其.scroll事件。