2010-08-20 31 views
5

Tôi đang đọc một hướng dẫn trực tuyến cho biết nếu <script></script> nằm ngay trên đầu trang của </body>$(document).ready là không cần thiết b/c tài liệu đã được tải tại thời điểm đó.

Q1> Điều đó có đúng không?

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> 

nào $ (window) có ý nghĩa gì? Đây có phải là công cụ chọn lọc không? Nếu đúng như vậy, xác nhận quyền sở hữu trước đó có vẻ chính xác vì chúng tôi không phải bao gồm điều này bên trong

$(document).ready(function() { 

}); 

Q3> tại sao chúng tôi sử dụng $ link tại đây? tại sao chúng tôi chọn sử dụng $link thay vì liên kết var?

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

Cảm ơn bạn

Trả lời

2

Q1. Có và không. Có lẽ jQuery vẫn sẽ làm một vài điều sau khi đã đạt được, nhưng nếu bạn chỉ đang cố gắng tìm một phần tử đã được tải trước đó trong cơ thể thì nó sẽ hoạt động.

Q2. Nó tạo ra một đối tượng jQuery trỏ đến cửa sổ. Nó không phải là một jQuery Selector, không phải là $ (document) hoặc $ (document.body) - trong đó bạn đang chuyển một nút tới jQuery và không phải là một Selector.

Q3. Nó lưu trữ nó. Bằng cách thực hiện $link = $('nav a[hash=#first]');, chúng tôi lưu trữ/gán kết quả cho $ link, như thể chúng tôi đã làm $('nav a[hash=#first]') hai lần, sau đó jQuery sẽ phải tìm kết quả đó hai lần - điều này có thể trở nên khá chuyên sâu nếu tất cả các cuộc gọi của bạn không được lưu trong bộ nhớ cache. Bạn cũng nên sử dụng var $link = $('nav a[hash=#first]');, để đảm bảo rằng $link không được xác định trên toàn cầu - vì điều đó là xấu (do xung đột biến đổi).

Như một thực tiễn chung; bất kỳ thứ gì sử dụng các phần tử DOM phải sau khi tài liệu sẵn sàng (để đảm bảo chúng đã được tải và jQuery sẵn sàng sử dụng chúng), bất kỳ thứ gì không nên (vì không cần phải đợi).

+0

Xin chào balupton, Tôi có thêm một câu hỏi được liệt kê là Q3. Nếu có thể, bạn có thể xem xét không? cảm ơn bạn – q0987

+0

Đã cập nhật cho Q3. – balupton

1

Q1 Sắp xếp đúng. Các chi tiết có trong api doc:

Trong khi JavaScript cung cấp sự kiện tải để thực thi mã khi trang được hiển thị, sự kiện này không được kích hoạt cho đến khi tất cả nội dung như hình ảnh đã được nhận hoàn toàn. ... Khi sử dụng các tập lệnh dựa vào giá trị của thuộc tính CSS, điều quan trọng là phải tham chiếu các biểu định kiểu bên ngoài hoặc nhúng các phần tử kiểu trước khi tham chiếu các tập lệnh.

Chèn mã ngay trước (hoặc sau) thẻ nội dung bế mạc và không sử dụng .ready() thường hoạt động tốt bởi vì thời gian phân tích cú pháp của trình duyệt đạt đến cuối của cơ thể, các dom là đủ để hoàn tất bạn có thể bắt đầu làm việc với các bộ chọn, v.v.

Q2 "cửa sổ" là object exposed by the browser; nó là một phần của DOM, nhưng không cần tham chiếu nó theo kiểu .ready (function() {}) vì HTML đang tải sẽ không thay đổi đối tượng đó theo bất kỳ cách nào để ảnh hưởng đến sự kiện .scroll của nó.

Các vấn đề liên quan