我想在$(this)选择器内“选择”一张图片。我知道可以使用.find('img')
来找到它,但是这个写法可行吗:
$("img",this)
?
什么是最优的方法呢?
原始代码如下:
<a class="picture" href="test.html">
<img src="picture.jpg" alt="awesome">
</a>
我想在$(this)选择器内“选择”一张图片。我知道可以使用.find('img')
来找到它,但是这个写法可行吗:
$("img",this)
?
什么是最优的方法呢?
原始代码如下:
<a class="picture" href="test.html">
<img src="picture.jpg" alt="awesome">
</a>
$(this).find('img')
和 $('img', this)
是等效的。所以您可以这样操作:
$('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。但这将削弱脚本的灵活性。
$(this)
而不是 this
,但基本上这就是做这件事的方法。+1 :) - Phoenixthis
可能会改变,而$('this')
则不会。http://remysharp.com/2007/04/12/jquerys-this-demystified/ - Marco Johannesenimg_var = $(this);
只是为了确保。有时在 $.foreach()
这样的函数内部,$(this)
也会发生变化。 - Phoenix是的,您可以这样做...无论如何,它们是等效的,所以只是关于您的“语法品味”:
在内部,选择器上下文是使用.find()方法实现的,因此$('span', this)等同于$(this).find('span')。
无论选择哪种方式都没有太大关系,这主要是一种风格选择。
jQuery通过在内部执行$(context).find(selector)
或(如果context
已经是jQuery实例)context.find(selector)
来处理表单$(selector, context)
,因此从理论上讲,find
形式稍微更有效,但这并不重要。
var myImg = $(this).find("img");