2012-01-30 30 views
6

Các dòng mã sau đây xuất phát từ chính thức dialog/#modal-form example

allFields = $([]).add(name) 

Có thể ai đó xin vui lòng làm rõ những gì $([]) không? Có giống như $("*") không?

Một điều khó hiểu khác là tôi không thấy allFields được thêm/nối vào bất kỳ đâu/đối tượng nào, nó chỉ được tạo và sửa đổi. Tui bỏ lỡ điều gì vậy?

Trả lời

3

Nếu bạn nhìn vào doco for the jQuery() function - thường được xem là phiên bản viết tắt $() - bạn sẽ thấy rằng nó chấp nhận nhiều loại và kết hợp các tham số khác nhau.

Cú pháp bạn hỏi về:

$([]) 

là cú pháp jQuery(elementArray) cho phép bạn vượt qua một loạt các yếu tố DOM nơi sự trở lại sẽ là một đối tượng jQuery gói những yếu tố này. Bằng cách truyền một mảng rỗng, bạn về cơ bản nhận được một đối tượng jQuery rỗng (giống như bạn sẽ thông qua một chuỗi chọn không khớp với bất kỳ thứ gì, nhưng không có sự thiếu hiệu quả của việc tìm kiếm một kết quả đầu tiên).

Khi tạo allFields có ba yếu tố DOM thêm vào nó (nơi name, emailpassword được tạo ra ngay trước đó như các đối tượng jQuery chứa một phần tử DOM mỗi):

allFields = $([]).add(name).add(email).add(password) 

Có lẽ lợi thế của việc thêm các cá nhân các mục thay vì chỉ thực hiện:

allFields = $("#name,#email,#password") 

là các đối tượng riêng lẻ cho từng thành phần cũng cần thiết và sẽ được tạo ra, vì vậy không cần bận tâm chọn lại chúng thông qua một chuỗi truy vấn.

Một điều khó hiểu là tôi không thấy allFields được thêm/nối vào bất cứ đâu/đối tượng bất kỳ, nó chỉ được tạo và sửa đổi, tôi có thiếu gì đó không?

Nó được gọi ở hai nơi khác trong các mã:

allFields.removeClass("ui-state-error"); 
// and, later 
allFields.val("").removeClass("ui-state-error"); 

Đây là cách sử dụng jQuery khá chuẩn để loại bỏ một lớp hoặc thiết lập giá trị của tất cả các yếu tố trong các đối tượng jQuery. Không cần phải thêm nó vào một số đối tượng khác.

5

$([]) tạo đối tượng jQuery trống, giống như $(). $('*') tạo đối tượng jQuery chứa tất cả các phần tử khớp với bộ chọn CSS *, mọi thành phần sẽ khớp với nhau.

Nói cách khác, $([]) không nhận được gì, $('*') tải mọi thứ.

1

jQuery (elementArray)

elementArray: Một mảng chứa một tập các phần tử DOM để quấn trong một đối tượng jQuery.

$([]) tạo một bộ trống được bọc trong đối tượng jQuery.

1

Dường như bạn đang đề cập đến những dòng sau:

var name = $("#name"), 
    email = $("#email"), 
    password = $("#password"), 
    allFields = $([]).add(name).add(email).add(password) 

gì đang xảy ra ở đây là họ chọn ba yếu tố và bây giờ họ muốn tạo ra một đối tượng jQuery đơn tham chiếu đến cả ba.

này cũng giống như những điều sau đây ngoại trừ việc họ tránh được các cuộc gọi selector:

allFields = $("#name, #email, #password") 

Về bản chất, họ đã tạo ra một số không nguyên tố đối tượng jQuery với $([]) sau đó nối, tên, email và mật khẩu để vào chung kết đối tượng là một đối tượng jQuery có chiều dài 3.