我試圖「選擇」一個$(this)選擇器內的img。我知道我可以通過使用.find('img')
找到它,但這是可能的:
$("img",this)
?
這樣做的最佳方式是什麼?
原代碼
<a class="picture" href="test.html">
<img src="picture.jpg" alt="awesome">
</a>
我試圖「選擇」一個$(this)選擇器內的img。我知道我可以通過使用.find('img')
找到它,但這是可能的:
$("img",this)
?
這樣做的最佳方式是什麼?
原代碼
<a class="picture" href="test.html">
<img src="picture.jpg" alt="awesome">
</a>
什麼是做到這一點的最優化的方式?
$(this).find('img')
和$('img', this)
都是等效的。
從文檔:
在內部,選擇上下文與.find()方法,所以 $實現( '跨度',此)等效於$(本).find('跨度「)。
一個完美合理的方式這樣做。
所以,你會做這樣的:
$('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;
});
實在是沒有什麼區別,因爲在這兩種方法中加載的DOM元素,和搜索。你的方式是「更乾淨」,更簡單,但可能更令人困惑:)
更快的方法是$(this).children()
,因爲它然後將不必搜索元素,但直接進入DOM的下行字。但它消除了腳本的靈活性。
有時您需要添加'$ (this)'而不是'this',但基本上就是這樣做的。 +1 :) – Phoenix 2012-04-17 07:59:32
@Phoenix是的,當你搜索它時調用元素是有道理的。從來沒有真正理解爲什麼你通常不需要打電話給它? :/ – 2012-04-17 08:01:49
似乎是如果你移進/移出DOM'this'可能會改變,'$('this')'不會改變。 http://remysharp.com/2007/04/12/jquerys-this-demystified/ – 2012-04-17 08:07:25
爲什麼不能使用.find('img')
?它適用於我:http://jsfiddle.net/nnmEY/
我想「選擇」一個$(this)選擇器內的img。
var myImg = $(this).find("img");
是的,你可以做到這一點......反正他們是等價的,所以它是唯一的你「句法口味」的問題:
內部,選擇上下文與實現.find()方法, 所以$('span',this)相當於$(this).find('span')。
它並不真正的問題,選擇你喜歡哪個,它主要是一個風格上的選擇。
的jQuery通過在幕後做$(context).find(selector)
或者(如果context
已經是一個jQuery的實例)context.find(selector)
處理表單$(selector, context)
,所以理論上find
形式略更有效,但不以任何方式這真的有可能重要。
兩種方式的工作原理都是一樣的。我認爲將這兩個「最優」中的任何一個稱爲是沒有意義的。 – Jon 2012-04-17 07:57:38
順便說一句,你可以隨時使用科學:http://jsperf.com/jqslctrtst – 2012-04-17 08:02:14
當然,它們是相同的,但.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