35

我正在尝试在 $(this) 选择器中“选择”一个 img。我知道我可以通过使用找到它,.find('img')但这可能吗:

$("img",this)?

做到这一点的最佳方法是什么?

原来代码

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

6 回答 6

74

做到这一点的最佳方法是什么?

两者$(this).find('img')$('img', this)是等价的。

从文档:

在内部,选择器上下文是用 .find() 方法实现的,所以 $('span', this) 等价于 $(this).find('span')。

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

于 2012-04-17T07:58:58.603 回答
5

这是一种完美合理的做法。

所以你会喜欢:

$('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 中搜索。但它消除了脚本的灵活性。

于 2012-04-17T07:57:16.860 回答
4

是的,你可以这样做......无论如何它们是等价的,所以这只是你的“句法品味”的问题:

在内部,选择器上下文是用 .find() 方法实现的,所以 $('span', this) 等价于 $(this).find('span')。

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

于 2012-04-17T07:59:14.583 回答
2

没关系,选择你喜欢的那个,这主要是一个风格的选择。

jQuery$(selector, context)通过在幕后执行$(context).find(selector)or(如果context已经是 jQuery 实例)来处理表单context.find(selector),因此理论上find表单的效率稍高一些,但实际上并不重要。

于 2012-04-17T08:01:07.183 回答
0

为什么不能用.find('img')?它对我有用:http: //jsfiddle.net/nnmEY/

于 2012-04-17T07:57:25.843 回答
0

我正在尝试在 $(this) 选择器中“选择”一个 img。

var myImg = $(this).find("img");
于 2012-04-17T07:57:35.280 回答