2013-06-05 31 views
5

Sự khác biệt giữa cửa sổ javascript và jquery $ (cửa sổ) là gì?

tôi đã cố gắng trong giao diện điều khiển Chrome và tôi có được điều này: enter image description here

Vì vậy, tôi sẽ kết luận là "chỉ là" một đối tượng cửa sổ được bọc trong một đối tượng jquery trong một cách mà sau đó tôi có thể sử dụng chức năng jquery về nó (như chiều cao(), chiều rộng(), v.v ...)

Tôi đã thử googling và stackoverlowing :) OFC, nhưng không may mắn.

+9

Kết luận của bạn khá chính xác. Không cần giải thích thêm, theo ý kiến ​​của tôi. – nnnnnn

+0

Như một vấn đề của thực tế bạn là đúng. – Igarioshka

+1

Tương tự như vậy [jQuery $ (this) vs this] (http://stackoverflow.com/questions/1051782/jquery-this-vs-this)! –

Trả lời

4

Khi bạn viết $(window), bạn nên biết rằng rằng đoạn mã sẽ chạy trên các công cụ JS . Đã bao giờ bạn tự hỏi tại sao tất cả các đối tượng jQuery đều có dấu ngoặc đơn xung quanh chúng? Đó là vì $ là một đối tượng hàm. Về cơ bản, bạn đang gọi hàm $ và chuyển đối tượng gốc toàn cầu hoặc window cho đối tượng đó.

Nếu bạn duyệt qua mã nguồn jQuery, bạn sẽ thấy rằng nó sẽ chuyển đối tượng đó vào nhiều hàm bên trong và cuối cùng, nó sẽ trả về đối tượng trình bao bọc jQuery.
Vì vậy, có, giả định của bạn khá chính xác.

0

cửa sổ là đối tượng chung và không có liên quan đến bất kỳ thư viện của bên thứ ba nào. tuy nhiên $ (cửa sổ) trả về một đối tượng jQuery. Bạn đúng là không có gì ngoài trình bao bọc nhưng nó đi kèm với tất cả các tính năng jQuery có thể có. Chúng ta có thể sử dụng nó giống như đối tượng jQuery bình thường chúng ta có thể truy cập vào Childs của nó, có thể kết hợp dữ liệu wtih nó vv vv

+0

'cửa sổ' không phải là đối tượng DOM, nó là tham chiếu vòng tròn cho đối tượng toàn cầu tên nam. Chỉ cần viết một kịch bản thực hiện điều này: 'console.log (cửa sổ === này);', nó sẽ ghi lại đúng sự thật. Như sẽ: 'console.log (điều này.cửa sổ === cửa sổ === này) 'một cách đơn giản '' dom, trong bất kỳ trường hợp –

+0

aah thats đúng, cảm ơn bạn Elias –

+0

@EliasVanOotegem - ví dụ thứ hai của bạn 'console.log (this.window === window === this) 'logs' false'. – nnnnnn

0

Bạn đang Ture

cửa sổ, mà là một wrapper jQuery chứa đối tượng cửa sổ toàn cầu. Mục đích ở đây là tạo một biến cửa sổ có phạm vi cục bộ để cho phép tôi truy cập ngay vào các phương thức jQuery như width(), height(), scrollLeft() và scrollTop().

+1

Bạn đã bỏ lỡ cốt truyện, tôi nghĩ: Làm thế nào bạn có thể tạo một biến phạm vi cục bộ của _the global object_? –

+0

@EliasVanOotegem - 'var localVariable = window;' sẽ làm điều đó phải không? Nhưng câu trả lời này vẫn không thực sự có ý nghĩa bởi vì phạm vi của biến không có gì liên quan đến những phương thức có sẵn trên nó. – nnnnnn

0

Đối tượng window thể hiện chính cửa sổ. Bạn có thể tìm thêm giải thích here. Từ những gì bạn mô tả ở trên, có vẻ như bạn đang tìm cách truy cập vào các thuộc tính document thay vì thuộc tính window. Bạn có thể truy cập vào chiều dài tính, chiều cao, vv như sau:

  • document.height (javascript tinh khiết) hoặc $ (document) .height() (jQuery)
  • document.width (javascript tinh khiết) hoặc $ (document) .width() (jQuery)

Để biết thêm document thuộc tính, xem here.

+0

Tại sao không '$ (cửa sổ) .height()'? Cung cấp chiều cao của chế độ xem của trình duyệt, thông thường (không phải là chiều cao) giống với chiều cao của tài liệu. – nnnnnn

+0

Bạn cũng có thể làm điều đó, bạn sẽ chỉ nhận được một kết quả khác vì window.height nhận được chiều cao của cửa sổ thay vì trình duyệt. Vì vậy, bạn sẽ nhận được một số ít hơn bằng cách sử dụng window.innerHeight hơn document.height. Việc sử dụng khá nhiều nắm bắt những gì bạn đang cố gắng để đạt được. – user2424941

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