this
là phần tử, $(this)
là đối tượng jQuery được xây dựng với phần tử đó
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
Nhìn sâu hơn
this
MDN được chứa trong ngữ cảnh thực thi
Phạm vi đề cập đến bối cảnh thực thi ECMA hiện tại . Để hiểu this
, điều quan trọng là phải hiểu cách thức bối cảnh thực thi hoạt động trong JavaScript.
bối cảnh thực hiện ràng buộc điều này
Khi điều khiển đi vào bối cảnh thực thi (mã đang được thực thi trong phạm vi đó), môi trường cho các biến được thiết lập (Môi trường biến đổi và biến đổi - về cơ bản, điều này thiết lập một khu vực để các biến có thể truy cập được và một khu vực dành cho các biến cục bộ được lưu trữ), và các ràng buộc this
xảy ra.
jQuery liên kết này
Bối cảnh thực hiện tạo thành một ngăn xếp hợp lý. Kết quả là bối cảnh sâu hơn trong ngăn xếp có quyền truy cập vào các biến trước đó, nhưng các ràng buộc của chúng có thể đã bị thay đổi. Mỗi khi jQuery gọi một hàm gọi lại, nó sẽ thay đổi liên kết này bằng cách sử dụng apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
Kết quả của việc gọi apply
là bên trong các hàm gọi lại jQuery, this
đề cập đến phần tử hiện tại đang được sử dụng bởi hàm gọi lại.
Ví dụ, trong .each
, chức năng gọi lại thường được sử dụng cho phép .each(function(index,element){/*scope*/})
. Trong phạm vi đó, this == element
là đúng.
Các cuộc gọi lại jQuery sử dụng hàm áp dụng để liên kết hàm được gọi với phần tử hiện tại. Phần tử này xuất phát từ mảng phần tử của đối tượng jQuery. Mỗi đối tượng jQuery được xây dựng chứa một mảng các phần tử khớp với API jQuery chọn được sử dụng để khởi tạo đối tượng jQuery.
$(selector)
gọi hàm jQuery (hãy nhớ rằng đó $
là một tham chiếu đến jQuery
, mã window.jQuery = window.$ = jQuery;
:). Trong nội bộ, hàm jQuery khởi tạo một đối tượng hàm. Vì vậy, trong khi nó có thể không rõ ràng ngay lập tức, sử dụng sử dụng $()
nội bộ new jQuery()
. Một phần của việc xây dựng đối tượng jQuery này là tìm tất cả các kết quả khớp của bộ chọn. Hàm tạo cũng sẽ chấp nhận các chuỗi và phần tử html . Khi bạn chuyển this
đến hàm tạo jQuery, bạn sẽ chuyển phần tử hiện tại cho một đối tượng jQuery được xây dựng . Đối tượng jQuery sau đó chứa cấu trúc giống như mảng của các phần tử DOM khớp với bộ chọn (hoặc chỉ phần tử đơn trong trường hợp this
).
Khi đối tượng jQuery được xây dựng, API jQuery hiện được hiển thị. Khi một hàm api jQuery được gọi, nó sẽ lặp bên trong cấu trúc giống như mảng này. Đối với mỗi mục trong mảng, nó gọi hàm gọi lại cho api, ràng buộc hàm gọi lại this
với phần tử hiện tại. Cuộc gọi này có thể được nhìn thấy trong đoạn mã ở trên, nơi obj
có cấu trúc giống như mảng và i
là trình vòng lặp được sử dụng cho vị trí trong mảng của phần tử hiện tại.