如果我想在页面上找到一个元素,我会使用 $('#Foo');
现在,我有一个场景,其中我的“this”上下文是一个 jQuery 元素。我想在“this”下面找到一个元素。
我在用:
$(this).find('#Foo');
我只是想确保没有一种更简洁的方式来表达这一点。如果我不在这个上下文中,我可能会使用类似 $('#this #Foo') 的东西。当我明确引用 'this' jQuery 元素时,我的 jQuery 选择器查询变得更长,这似乎令人惊讶。
如果我想在页面上找到一个元素,我会使用 $('#Foo');
现在,我有一个场景,其中我的“this”上下文是一个 jQuery 元素。我想在“this”下面找到一个元素。
我在用:
$(this).find('#Foo');
我只是想确保没有一种更简洁的方式来表达这一点。如果我不在这个上下文中,我可能会使用类似 $('#this #Foo') 的东西。当我明确引用 'this' jQuery 元素时,我的 jQuery 选择器查询变得更长,这似乎令人惊讶。
首先,由于元素 id 对文档来说是唯一的,因此您不需要在另一个元素的上下文中找到一个。但是对于一个好的语法,我喜欢
$('.foo', this) 将找到所有具有“foo”类的孩子
$(this).children('#Foo');
解释
原因是,.children()
仅查看节点的直接子节点,同时.find()
遍历节点下方的整个 DOM,因此在等效实现的情况下.children()
应该更快。find
但是,使用本机浏览器方法,而children
使用在浏览器中解释的 JavaScript。在我的实验中,典型情况下的性能差异不大。
参考
ID 应该是唯一的,所以#Foo
在 jQuery 中选择的最快方法就是
$('#Foo')
为了回答您的问题,该.children()
方法比.find()
大多数浏览器更快,并且只要您处理直系后代,它的工作原理就相同。
$(this).children('#Foo')
我整理了一个JSPerf来演示这一点。请记住,在大多数情况下,性能差异可以忽略不计。
如果您通过 id 查找元素,则不需要预先选择 $(this)。元素 ID 应该是唯一的。没有两个元素应该具有相同的 id。也就是说,如果您选择其他内容,例如类,则需要使用 $(this).find(".myclass") 来选择子元素。