2012-01-03 49 views
9

Tôi thường xem ví dụ về việc sử dụng từ khóa this trong jquery. Đôi khi tôi thấy nó được sử dụng với $ và dấu ngoặc đơn, những lần khác mà không có. Và tôi nghĩ rằng tôi thấy nó được sử dụng với một chút của mỗi.

Vì vậy,

var id = this.attr('id'); 

var id = $(this).attr('id'); 

var id = $this.attr('id'); 

Là những bài giống nhau không? Có cách nào ưu tiên không? Là this điều javascript và $(this) một điều jQuery? Nếu có, thì $this sẽ rơi vào đâu?

Tôi biết đây có lẽ là một câu hỏi mới về tổng số người mới, nhưng tôi không thể tự mình làm đơn giản, this. Tôi chỉ có thể nhận được $(this) để hoạt động. Tôi không chắc liệu tôi có làm điều gì sai hay là tôi đã đọc các ví dụ với lỗi chính tả.

+1

'this' là tham chiếu tự js và đặt $() chỉ kết thúc tốt đẹp với lớp jquery. Những gì đề cập đến $ this - nó chỉ là một tên biến (không được xác định trước) và thường được sử dụng trong jquery plugins chỉ để luôn luôn có một tham chiếu đến lớp cha mẹ cấp 1 từ lớp con –

Trả lời

10

this là một điều JavaScript. Nó đề cập đến "ngữ cảnh" một chức năng đang chạy. Đối với hầu hết các trình xử lý sự kiện, nó là phần tử DOM ("thô") đang lắng nghe một sự kiện. Trong các tình huống khác, nó sẽ có nghĩa là những thứ khác; Googling "this trong JavaScript" có thể là khai sáng.


tôi nói nó là "thô" DOM ​​yếu tố vì jQuery thường được dùng để bọc phần tử DOM đồng bằng trong một wrapper jQuery, vì vậy bạn có thể sử dụng phương pháp jQuery như attr thay vì những cái thông thường (getAttribute, setAttribute, v.v.). Gói này được thực hiện với chức năng $ và đó là nơi bạn thấy $(this). Ví dụ:

this.getAttribute("href") 
/* or */ someElement.getAttribute("href") 

cũng giống như

$(this).attr("href") 
/* or */ $(someElement).attr("href") 

$this hoặc this$ chỉ là một tên biến.Tuy nhiên, nó thường là thông thường để làm một bài tập như

var $this = $(this); 

Lý do của việc này là để tránh tiếp tục viện dẫn $ chức năng, mà là hơi đắt vì nó tạo ra một jQuery wrapper đối tượng mới mỗi lần. Nếu bạn lưu trữ phần tử được bao bọc trong một biến, bạn sẽ tăng hiệu quả một chút.


Trong trường hợp hiếm hoi, this có thể đã là trình bao bọc jQuery. Các trường hợp mà đi lên thường xuyên đối với tôi là khi viết jQuery plugin. Trong trường hợp đó, bạn có thể thực hiện những việc như trực tiếp this.attr("id"), mà không cần gói nó trước, bởi vì nó đã được bao bọc. Trong các trường hợp thông thường (các trình xử lý sự kiện, $.each, v.v.) trình bao bọc là cần thiết.

+0

+1 Câu trả lời hay. Rất kỹ lưỡng. – ThinkingStiff

+0

Vâng, câu trả lời tuyệt vời. Và phần cuối cùng đó giúp giải thích điều tôi đọc ở đâu đó nhưng lại có thể tìm thấy nó. Tôi đã thấy 'this.attr (" id ")' được sử dụng, nhưng nó không hiệu quả với tôi. Tôi nghĩ đó là điều làm tôi bối rối nhất. –

5

this là đối tượng Javascript gốc đề cập đến đối tượng hiện tại. Trong các hàm jQuery được định nghĩa với jQuery.fn., this là một đối tượng jQuery của chính nó. $(this) là cách của jQuery để biến Javascript this thành đối tượng jQuery. Và $this chỉ là một tên biến. Nếu bạn chưa xác định, nó sẽ là undefined.

Dưới đây là một lời giải thích tốt của việc sử dụng jQuery của this:

http://www.learningjquery.com/2007/08/what-is-this

+1

'this' không chỉ được sử dụng trong xử lý sự kiện, nó là một tham chiếu đến đối tượng hiện tại. Dưới đây là giải thích thêm: http://justin.harmonize.fm/index.php/2009/09/an-introduction-to-javascripts-this/ – voithos

+0

@voithos Cảm ơn. Đã cập nhật. – ThinkingStiff

8

'này' là một từ khóa đối tượng Javascript cho đề cập đến đối tượng hiện tại, '$ (this)' là jQuery chức năng bao bọc mà biến đối tượng hiện tại thành đối tượng jQuery và khi bạn thấy '$ this' nó thường đề cập đến một biến mà nhà phát triển tạo ra để tham chiếu đến đối tượng $ (this) này, nó hữu ích trong vòng lặp $ .each. Ví dụ:

$(function(){ 
    $('a').click(function(){ 
    var $this = $(this); // refers to the $('a') object 
    $('div').each(function(){ 
     $(this).hide(); // $(this) refers to each 'div' in the loop, not the $('a') 
     $this.css({ color: 'blue' }); // turns the link element text blue 
    }); 
    }); 
}); 
+0

Bạn có thể giải thích câu trả lời của mình để hiển thị thời điểm và lý do đồng bằng 'this' có thể phát ra – veeTrain

+0

Lý do duy nhất để sử dụng đơn giản 'this' trong trường hợp này là bạn cần truy cập một phương thức hoặc biến trên DOM DOM thô như ở đây: http://www.w3schools.com/jsref/dom_obj_node.asp Ví dụ bạn sẽ không thể sử dụng một phương thức jQuery trên đồng bằng 'this' như: this.hide(); – afrederick

+0

Ồ ... tôi hiểu rồi. Vì vậy, nó sẽ được an toàn để nói rằng bất cứ điều gì 'hoạt động' bạn thực hiện trên 'này' sẽ có khả năng không tuân thủ trình duyệt chéo? Trong khi gói nó trong '$()' và sử dụng một phương pháp jQuery sẽ rất an toàn hơn? Nó có thể là tốt để cập nhật câu trả lời của bạn để phản ánh những tác động của 'this' kể từ khi OP muốn biết về điều đó – veeTrain

1

thay vì gọi $(this) nhiều lần, việc lưu trữ dưới dạng biến là hiệu quả hơn, thường được gọi là $this để mọi người biết nó là gì.

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