2011-09-08 5 views
9

Tôi đang xem một plugin jQuery, có một chức năng duy nhất. Sau khi thiết lập giá trị mặc định thích hợp mặc dù một đối số nhà xây dựng chức năng định nghĩa một vài chức năng helper, và sau đó là phần cuối cùng trả về một cuộc gọi đến this.each(), như vậy:"return this.each()" làm gì trong jQuery?

return this.each(function() { 
//long method defined here 
}); 

Tôi hiểu việc sử dụng this.each() trong việc sửa đổi các phần tử DOM phù hợp và như vậy, nhưng câu lệnh return trả về là gì? Một số loại phần tử DOM đã sửa đổi, sau đó có thể bị xích trong các cuộc gọi khác?

Tôi đã đọc về this.each trên trang web này nhưng tôi không thể hoàn toàn hiểu được những gì return có ở đây. Cảm ơn bạn đã giúp làm rõ điều này.

Trả lời

7

Nó cho phép một để gọi một plugin hoặc một sự kiện trên một loạt các yếu tố và sau đó áp dụng cùng chức năng hoặc sự kiện để tất cả trong số họ

Vì vậy, nếu bạn làm:

$('.selector').myPlugin(); 

Và nếu, chúng ta hãy nói, .selector chứa 10 yếu tố, tất cả 10 yếu tố sẽ nhận được bất cứ điều gì myPlugin.


Lý do trả lại rằng .each tuyên bố là vì .each() trả về bất kỳ nó đã được đưa ra và nó cho phép bạn chuỗi nhiều chức năng và bổ sung với nhau trên một yếu tố jQuery.

Ví dụ:

$('.selector').myPlugin().yourPlugin(); 
+0

Nhờ mọi người cho trả lời. Tôi đoán những gì gây nhầm lẫn cho tôi là có 'trở lại' và this.each() trên cùng một dòng. Như một tương đương tôi có thể gọi this.each (...) và sau đó ở phần cuối của cuộc gọi hàm đó, trên dòng tiếp theo, viết 'return this'? – larryq

+0

Sau khi đã gõ ở trên, tôi nghĩ rằng tôi sẽ thấy những gì đang diễn ra. Tôi sẽ phải lưu kết quả của this.each (..) vào một biến, mà sẽ là đối tượng jQuery, và trả về ở cuối phương thức. 'this' trong ngữ cảnh của this.each (...) đề cập đến phần tử DOM mà tôi gọi là hàm chống lại. – larryq

10

.each trả lại các phần tử được gọi, vì vậy trong trường hợp này, có thể là duy trì khả năng của các phương thức bị xích trên bộ chọn đó. Điều đó có nghĩa rằng nếu phương pháp plugin CỦA được gọi foo, bạn sẽ có thể để làm

$("mySelector").foo().show(); 

foo trả lại kết quả của .each mà về cơ bản là $("mySelector").

Hy vọng rằng sẽ có ý nghĩa.

4

này làm cho nó có thể để giữ đối tượng chuỗi, vì vậy bạn có thể gọi các phương thức jquery như thế này:

$("selector").css().mouseover().etc().blahblah(); 
2

Nó trả về đối tượng JQuery phương pháp được gọi là trên như đã nêu trong docs. Vì vậy, bạn có thể gọi một phương thức khác trên giá trị trả về.

// without method chaining 
myobject.a() 
myobject.b() 
myobject.c() 

// with method chaining 
myobject.a().b().c(); 

Xem method chainingfluent interface