Đây có phải là dòngCú pháp "này" hoạt động như thế nào?
$(this).attr("id").replace("_button","");
tương đương với trang này?
this.attr("id").replace("_button","");
Đây có phải là dòngCú pháp "này" hoạt động như thế nào?
$(this).attr("id").replace("_button","");
tương đương với trang này?
this.attr("id").replace("_button","");
kể từ this
luôn chứa tham chiếu đến object of invocation
, nó thực sự phụ thuộc vào trong đó bạn gọi mã đó.
Nếu bạn gọi này trong vòng một jQuery event handler
, this
là một tham chiếu đến DOM element
chính nó, vì vậy bạn cần phải dịch nó thành một đối tượng jQuery bằng cách gọi $()
trước khi bạn có thể gọi các phương thức jQuery trên đó. Điều đó có nghĩa là
this.attr("id").replace("_button","");
sẽ không hoạt động ở đó.
Nếu bạn đang writting một phương pháp plugin cho ví dụ, this
đã LÀ một jQuery object
(reference
) và cả hai dòng sẽ thực sự làm như vậy. Tất nhiên, nếu this
đã là jQuery object
bạn làm thêm công việc, cố gắng phân tích lại lần nữa.
dụ:
$.fn.yourplugin = function(){
// this refers to a jQuery object
return this.each(function(i,v){
});
});
+1 để có những suy nghĩ gần như giống nhau ở đây: p (sao chép dán: D) (và tôi thích * đối tượng yêu cầu *) –
Tôi vừa mới nhận ra rằng crockford là đúng, ông đã đề cập đến một nơi nào đó mà thật khó để nói về 'điều này'. "Nếu bạn gọi đây" là rắc rối cho người đọc rồi. – jAndy
No. Có vẻ như bạn đang ở trong bối cảnh đóng cửa được sử dụng cho phương pháp jquery. Trong hàm, nó trỏ tới đối tượng DOM hiện tại, do đó các hàm jquery sẽ không thể thực hiện được. Đó là lý do tại sao nó được bọc bằng hàm jquery để có được đối tượng đó.
Tùy thuộc vào ngữ cảnh, nhưng có thể không.
Nếu bạn có một xử lý sự kiện, nói:
$('#_button_foo').click(function() {
$(this).attr("id").replace("_button","");
});
Sau đó this
sẽ đề cập đến các yếu tố DOM trong khi $(this)
tạo ra một đối tượng jQuery và cho phép bạn gọi chức năng jQuery trên đối tượng này.
Ở phía bên kia, nếu bạn phát triển một plugin và có
jQuery.fn.plugin = function() {
this.each(function() {...});
}
sau đó this
đề cập đến đối tượng jQuery bạn gọi phương thức trên.
Những người downvote ít nhất có thể giải thích lý do tại sao. Cảm ơn bạn :) –
+1 vì có những suy nghĩ gần như giống nhau ở đây: p – jAndy
Các $ (this) sẽ lần lượt đối tượng DOM vào một đối tượng jQuery, vì vậy bạn có thể sử dụng các chức năng jQuery.
Vì vậy, $(this)
và this
không giống nhau.
this
đề cập đến đối tượng được sử dụng. Trong phạm vi toàn cầu, nó đề cập đến window
và trong phương thức gọi nó đề cập đến đối tượng mà phương thức được gọi.
Trong trường hợp của bạn this
lẽ sẽ đề cập đến một yếu tố trong DOM mà được nạp với một số cơ chế jQuery khác như một sự kiện (click
, hover
, vv) hoặc lặp đi lặp lại trên một danh sách các yếu tố (như jQuery.each
). Trong trường hợp đó, bạn chỉ nhận được phần tử DOM đó chứ không phải đối tượng jQuery với phần mở rộng của các phương thức jQuery như attr
. Vì vậy, bạn cần phải biến nó thành một đối tượng jQuery bằng cách sử dụng hàm xây dựng $
.
Trong javascript, từ khóa 'this
' đề cập đến đối tượng có bối cảnh mà bạn đang ở. Vì vậy, nếu bạn đang gọi điện thoại myObj.method1()
, sau đó bên trong mã method1 của, 'this
' sẽ tham khảo myObj
.
Trong jQuery, hầu hết các hoạt động trả về một đối tượng tập kết quả jQuery, thường được gọi là trình bao bọc jQuery. Ví dụ: công cụ chọn $("a")
sẽ trả lại tập kết quả jQuery chứa tất cả các phần tử DOM <a>
. $("a").get(0)
sẽ quay trở lại các yếu tố neo đầu tiên DOM, $("a").get(1)
sẽ trả lại neo thứ hai vv
Vì vậy $(this)
đề cập đến đối tượng wrapper jQuery, và this
đề cập đến phần tử DOM.
Vì vậy, để tổng hợp tất cả: $(this).get(0)
sẽ giống như this
.
this
luôn đề cập đến đối tượng mà hàm hiện tại là thành viên của. Nếu hàm là toàn cầu, thường là đối tượng window
, ít nhất là nếu bạn đang ở trong trình duyệt web.
$(this)
thực sự là $()
(hàm jQuery chính) được gọi với tham số trước this
làm tham số. Nó kết thúc tốt đẹp this
thành một đối tượng jquery cung cấp tất cả các phương thức jQuery. Các phương thức này không khả dụng trên chỉ this
.
Tùy thuộc vào ngữ cảnh bạn đang sử dụng.
$(this)
là đối tượng jQuery và this
là đối tượng DOM.
Vì vậy, chúng không giống nhau.
Nếu bạn đang phát triển plugin jquery thì this
giống với $(this)
.
Tôi nghĩ là không.
Thay vào đó, bạn có thể sử dụng this.id.replace ("_ button", "").
Ngữ cảnh khác trên mã này sẽ hữu ích. Tôi đã để lại một câu trả lời nhưng tôi đã đưa ra một số giả định có thể sai dựa trên nơi mà điều này xuất phát. – spinon