jquery - $(document).ready是否必要?

时间:2010-08-20 04:27:55

标签: jquery

我正在阅读一个在线教程,该教程说明<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>

谢谢

3 个答案:

答案 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事件。