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

q09*_*987 5 jquery

我正在阅读一个在线教程,该教程说明如果<script></script>正确</body>的话$(document).ready是不是必要的b/c那时文档已被加载.

Q1>这是真的吗?

Q2>

<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>
Run Code Online (Sandbox Code Playgroud)

$(窗口)是什么意思?这是一个jquery选择器吗?如果是,那么之前的声明看起来是正确的,因为我们不必将其包括在内

$(document).ready(function() {

});
Run Code Online (Sandbox Code Playgroud)

Q3>为什么我们在这里使用$ link?为什么我们选择使用$link而不是var链接?

<script>
$(window).scroll(function() {
  $link = $('nav a[hash=#first]');
  $link.addClass('selected');
});
</script>
Run Code Online (Sandbox Code Playgroud)

谢谢

bal*_*ton 2

Q1. 是和不是。也许 jQuery 在到达之后仍然会做一些事情,但如果你只是想找到一个之前在正文中加载的元素,它会起作用。

Q2。它创建一个指向窗口的 jQuery 对象。它不是 jQuery 选择器,也不是 $(document) 或 $(document.body) - 在这些选择器中,您将节点传递给 jQuery,而不是选择器。

Q3。它缓存它。通过执行,$link = $('nav a[hash=#first]');我们将结果缓存/分配给 $link,就像我们做了$('nav a[hash=#first]')两次一样,那么 jQuery 将必须找到该结果两次 - 如果您的所有调用都没有缓存,这可能会变得/将变得相当密集。您还应该使用var $link = $('nav a[hash=#first]');, 以确保$link未在全局范围内定义 - 因为这是不好的(由于变量冲突)。

作为一般做法;任何使用 DOM 元素的东西都应该在文档准备好之后(以确保它们已经加载并且 jQuery 准备好使用它们),任何不使用 DOM 元素的东西都应该在文档准备好之后(因为不需要等待)。