2011-12-22 20 views
11

Cụm từ này có đúng không?

$("p").click(function(event) { 
    alert(event.currentTarget === this); 
}); 

Một phương pháp có được ưu tiên hơn phương pháp kia không? Tôi thích sử dụng $(this) thay vì event.currentTarget nhưng có thể làm tốt hơn trong một số điều kiện không? Cái nào tốt hơn? Hoàn toàn giống nhau không?

Và một sắc thái khác - Khi kiểm tra trên firebug console.log(this)console.log($(this)) mang lại cho tôi chính xác cùng một yếu tố. Nếu chúng giống nhau - khác nhau là gì? (Kể từ khi tôi biết tôi có thể viết những dòng này $(this).css('color','white') nhưng không thể viết this.css('color','white')

Trả lời

13

Nói chung, có, nó sẽ giống nhau.Bạn có thể làm cho nó khác nhau bằng cách sử dụng $.proxy để thao tác ngữ cảnh, nhưng trong thực tế bạn có thể sẽ không bao giờ.

$(document.body).on('click', $.proxy(function(e) { 
    console.log(this);   // window 
    console.log(e.currentTarget); // document.body 
}, window)); 

Đối với câu hỏi khác, this là một phần tử DOM gốc, trong khi $(this) là một đối tượng jQuery gói phần tử DOM đó. Trình bao bọc jQuery có nghĩa là bạn có thể chạy các hàm jQuery chẳng hạn như css, không có sẵn trên các phần tử DOM gốc.


Và, để trả lời những từ ngữ chính xác của câu hỏi của bạn, event.currentTarget thường bằng this, không $(this).

+0

:(một phút quá muộn. –

0

Thuộc tính này thường sẽ bằng với này của hàm.

Nếu bạn đang sử dụng jQuery.proxy hoặc một hình thức phạm vi thao tác, điều này sẽ tương đương với bất kỳ bối cảnh nào bạn đã cung cấp, chứ không phải là bất kỳ bối cảnh nào bạn đã cung cấp, chứ không phải event.currentTarget

1

Một phần câu trả lời của bạn ở trên. Tôi hy vọng nó đủ rõ ràng.

Không console.log(this)console.log($j(this)) sẽ không cung cấp cho bạn kết quả tương tự. $ (this) chuyển đổi nó thành một đối tượng jQuery và do đó bạn có thể gọi .css như các phương thức có thể được gọi trên các đối tượng jQuery ($ (this)) và không phải là các phần tử HTML sẽ là this.

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