2012-04-17 27 views
26

Tôi đang cố gắng "chọn" một img bên trong bộ chọn $ (this) này. Tôi biết tôi có thể tìm thấy nó bằng cách sử dụng .find('img') nhưng điều này có thể:

$("img",this)?

Cách tối ưu nhất để làm điều này là gì?

Nguyên đang

<a class="picture" href="test.html"> 
    <img src="picture.jpg" alt="awesome"> 
</a> 
+0

Cả hai cách sẽ hoạt động giống nhau. Tôi không nghĩ rằng nó có ý nghĩa để gọi bất kỳ của hai "tối ưu". – Jon

+1

BTW, bạn luôn có thể sử dụng khoa học: http://jsperf.com/jqslctrtst –

+0

Đúng, chúng giống nhau, nhưng .find() nhanh hơn một chút so với ngữ cảnh. http://jsperf.com/jquery-context-find-and-children-selectors/6 http://jsperf.com/jquery-find-vs-context-2/2 – rucsi

Trả lời

55

cách tối ưu nhất để làm điều này là gì?

Cả hai $(this).find('img')$('img', this) tương đương nhau.

Từ các tài liệu:

Bên trong, bối cảnh selector được thực hiện với phương pháp .find(), nên $ ('tuổi', điều này) là tương đương với $ (this) .find ('tuổi ').

http://api.jquery.com/jQuery/

4

Đó là một hoàn hảo một cách hợp lý cách làm việc đó.

Vì vậy, bạn sẽ làm như sau:

$('a').click(function() { 
    //if the element dosent change you can use this 
    //var src = $('img', this).attr('src'); 
    //else use $(this) 
    var src = $('img', $(this)).attr('src'); 
    alert(src); 
    return false; 
}); 

Xem: http://jsfiddle.net/xYmwV/

Có thực sự là không có sự khác biệt, vì trong cả hai phương pháp bạn nạp các yếu tố dom, và tìm kiếm nó. Cách thức của bạn là "sạch hơn" và đơn giản hơn, nhưng có thể gây nhầm lẫn hơn :)

Cách nhanh hơn sẽ là $(this).children() vì nó sẽ không phải tìm kiếm các phần tử, nhưng đi xuống các từ khóa trực tiếp trong DOM. Nhưng nó sẽ đưa ra sự linh hoạt của kịch bản.

+0

Đôi khi bạn cần thêm '$ (này) 'thay vì' this', nhưng về cơ bản đó là cách để làm điều này. +1 :) – Phoenix

+0

@Phoenix Yea, bạn nên gọi phần tử khi tìm kiếm. Không bao giờ thực sự hiểu tại sao bạn thường không cần phải gọi nó? :/ –

+0

Dường như nếu bạn di chuyển vào/ra khỏi DOM 'this' có thể thay đổi, ở đâu là' $ ('this') 'sẽ không. http://remysharp.com/2007/04/12/jquerys-this-demystified/ –

0

Tôi đang cố gắng "chọn" một img bên trong bộ chọn $ (this) này.

var myImg = $(this).find("img"); 
2

Có bạn có thể làm điều đó ... dù sao họ là tương đương, vì vậy nó chỉ là một vấn đề của 'thị hiếu cú ​​pháp' của bạn:

Bên trong, bối cảnh selector được thực hiện với phương thức .find(), vì vậy $ ('span', this) tương đương với $ (this) .find ('span').

http://api.jquery.com/jQuery/

1

Nó không thực sự quan trọng, chọn nào bạn thích, nó chủ yếu là một sự lựa chọn phong cách.

jQuery xử lý các hình thức $(selector, context) bằng cách làm $(context).find(selector) hoặc (nếu context đã là một trường hợp jQuery) context.find(selector) dưới lớp chăn, vì vậy về mặt lý thuyết hình thức findhơi hiệu quả hơn, nhưng không phải trong bất kỳ cách nào đó là thực sự có khả năng thành vấn đề.

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