2012-04-17 118 views
26

我試圖「選擇」一個$(this)選擇器內的img。我知道我可以通過使用.find('img')找到它,但這是可能的:

$("img",this)

這樣做的最佳方式是什麼?

原代碼

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

兩種方式的工作原理都是一樣的。我認爲將這兩個「最優」中的任何一個稱爲是沒有意義的。 – Jon 2012-04-17 07:57:38

+1

順便說一句,你可以隨時使用科學:http://jsperf.com/jqslctrtst – 2012-04-17 08:02:14

+0

當然,它們是相同的,但.find()比上下文快一點。 http://jsperf.com/jquery-context-find-and-children-selectors/6 http://jsperf.com/jquery-find-vs-context-2/2 – rucsi 2012-04-17 08:37:52

回答

55

什麼是做到這一點的最優化的方式?

$(this).find('img')$('img', this)都是等效的。

從文檔:

在內部,選擇上下文與.find()方法,所以 $實現( '跨度',此)等效於$(本).find('跨度「)。

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

4

一個完美合理的方式這樣做。

所以,你會做這樣的:

$('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; 
}); 

參見:http://jsfiddle.net/xYmwV/

實在是沒有什麼區別,因爲在這兩種方法中加載的DOM元素,和搜索。你的方式是「更乾淨」,更簡單,但可能更令人困惑:)

更快的方法是$(this).children(),因爲它然後將不必搜索元素,但直接進入DOM的下行字。但它消除了腳本的靈活性。

+0

有時您需要添加'$ (this)'而不是'this',但基本上就是這樣做的。 +1 :) – Phoenix 2012-04-17 07:59:32

+0

@Phoenix是的,當你搜索它時調用元素是有道理的。從來沒有真正理解爲什麼你通常不需要打電話給它? :/ – 2012-04-17 08:01:49

+0

似乎是如果你移進/移出DOM'this'可能會改變,'$('this')'不會改變。 http://remysharp.com/2007/04/12/jquerys-this-demystified/ – 2012-04-17 08:07:25

0

我想「選擇」一個$(this)選擇器內的img。

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

是的,你可以做到這一點......反正他們是等價的,所以它是唯一的你「句法口味」的問題:

內部,選擇上下文與實現.find()方法, 所以$('span',this)相當於$(this).find('span')。

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

1

它並不真正的問題,選擇你喜歡哪個,它主要是一個風格上的選擇。

的jQuery通過在幕後做$(context).find(selector)或者(如果context已經是一個jQuery的實例)context.find(selector)處理表單$(selector, context),所以理論上find形式更有效,但不以任何方式這真的有可能重要。

相關問題