2011-01-24 35 views
10

Có sự khác biệt nào giữa: $(document)$("document")?

CHỈNH SỬA: cũng khi vào trong số .ready() ví dụ: $("document").ready()

Trả lời

19

$(document) sử dụng jQuery để bọc đối tượng document toàn cầu.

$("document") nỗ lực để tìm kiếm một yếu tố <document>, mà rõ ràng là chẳng có ý nghĩa trong HTML vì không có yếu tố như vậy, chỉ có một đối tượng gốc document đại diện trong đánh dấu bởi các yếu tố <html>. Nó hoạt động theo cách đó bởi vì bằng cách chuyển hàm jQuery một chuỗi, bạn đang thực sự cho nó một selector.

Re chỉnh sửa: như patrick dw nói, trong bối cảnh ready() không có sự khác biệt, và trong thực tế như jQuery 3.0 sử dụng $(document) ở tất cả hoặc gọi một cách rõ ràng ready() bị phản đối. Từ documentation:

jQuery cung cấp một số cách để đính kèm một chức năng sẽ chạy khi DOM sẵn sàng. Tất cả các cú pháp sau là tương đương:

  • $(handler)
  • $(document).ready(handler)
  • $("document").ready(handler)
  • $("img").ready(handler)
  • $().ready(handler)

Tính đến jQuery 3.0, chỉ cú pháp đầu tiên được đề nghị; các cú pháp khác vẫn hoạt động nhưng không được chấp nhận. Điều này là do việc lựa chọn không có ảnh hưởng đến hành vi của phương thức .ready(), đó là không hiệu quả và có thể dẫn đến các giả định không chính xác về hành vi của phương thức. Ví dụ, cú pháp thứ ba làm việc với "document" mà không chọn gì cả. Cú pháp thứ tư đợi cho tài liệu sẵn sàng nhưng ngụ ý (không chính xác) rằng nó đợi hình ảnh sẵn sàng.

+2

Câu trả lời rất hay cho câu hỏi * thực tế *. +1 – user113716

+0

Vậy sự khác biệt giữa $ ("html") và $ (tài liệu) là gì? – Andrew

+0

@Andrew: html là phần tử gốc tài liệu (document.documentElement), không phải là đối tượng tài liệu. Nếu bạn muốn tự sửa đổi phần tử html (ví dụ: bằng cách thêm hoặc xóa tên lớp), hãy sử dụng $ ("html"), chứ không phải $ (tài liệu). – BoltClock

0

document là biến toàn cầu được tạo trước là biểu diễn của tài liệu HTML hiện tại, viết tắt là window.document.

$("document"), như @BoltClock đã chỉ ra, sẽ sử dụng chuỗi đó làm bộ chọn cho phần tử <document>.

1

Ví dụ đầu tiên của bạn sẽ tìm kiếm một biến hoặc đối tượng được gọi là tài liệu trong JS của bạn. (Hãy cẩn thận, đó là biến được xác định trước)

Thứ hai sẽ tìm kiếm trang cho thẻ có tên "tài liệu".

var document = 'div#logo'; 
$(document); //will search for div#logo 
$('document'); //will search for document 
7

Nếu bạn đang nói về cách gọi .ready() chức năng, nó (hiện tại) làm cho không có sự khác biệt.

Trong cả hai trường hợp, đối số sẽ bị bỏ qua.

Bạn có thể làm điều này:

$("cheese pizza").ready(function() {}); 

Để được rõ ràng, nó là tốt nhất để sử dụng các cuộc gọi hỗ trợ chính thức để .ready(), đó là:

$(document).ready(function(){/*...*/}); 

và:

$(function(){/*...*/}); 

Khi hành động ual chọn document, bạn nên sử dụng $(document).

+0

Tại sao nó bị bỏ qua? – BoltClock

+0

Chắc chắn có thực sự là một sự khác biệt. Bạn có nói rằng cuộc gọi '.ready()' hoạt động trên bất kỳ đối tượng jQuery nào không? Nếu đó là sự thật, thì tại sao bạn không thể sử dụng '$ .ready (...)'? –

+0

@ Greg, Bolt: Tôi đã cập nhật. Tôi đã đặt một suy nghĩ khác vào câu hỏi sớm. – user113716