-1

如果我想在页面上找到一个元素,我会使用 $('#Foo');

现在,我有一个场景,其中我的“this”上下文是一个 jQuery 元素。我想在“this”下面找到一个元素。

我在用:

$(this).find('#Foo');

我只是想确保没有一种更简洁的方式来表达这一点。如果我不在这个上下文中,我可能会使用类似 $('#this #Foo') 的东西。当我明确引用 'this' jQuery 元素时,我的 jQuery 选择器查询变得更长,这似乎令人惊讶。

4

4 回答 4

2

首先,由于元素 id 对文档来说是唯一的,因此您不需要在另一个元素的上下文中找到一个。但是对于一个好的语法,我喜欢

$('.foo', this) 将找到所有具有“foo”类的孩子

于 2013-02-08T18:42:42.663 回答
1

.children().find()

$(this).children('#Foo');

解释

原因是,.children()仅查看节点的直接子节点,同时.find()遍历节点下方的整个 DOM,因此在等效实现的情况下.children()应该更快。find但是,使用本机浏览器方法,而children使用在浏览器中解释的 JavaScript。在我的实验中,典型情况下的性能差异不大。

参考

  1. jQuery 中最快的 children() 或 find() 是什么?
  2. 遍历.children()
  3. 遍历.find()
于 2013-02-08T18:41:33.430 回答
0

ID 应该是唯一的,所以#Foo在 jQuery 中选择的最快方法就是

$('#Foo')

为了回答您的问题,该.children()方法比.find()大多数浏览器更快,并且只要您处理直系后代,它的工作原理就相同。

$(this).children('#Foo')

我整理了一个JSPerf来演示这一点。请记住,在大多数情况下,性能差异可以忽略不计。

于 2013-02-08T18:40:46.490 回答
0

如果您通过 id 查找元素,则不需要预先选择 $(this)。元素 ID 应该是唯一的。没有两个元素应该具有相同的 id。也就是说,如果您选择其他内容,例如类,则需要使用 $(this).find(".myclass") 来选择子元素。

于 2013-02-08T19:03:15.507 回答