7

我什么时候会使用 jQuery 的.find()

例如,

$('tr').find('.someClass');相当于$('tr .someClass')

那么,什么时候会是一个很好的例子来说明何时使用.find()直接选择器?

另外,哪个性能更高?选择器比 快.find()吗?

4

4 回答 4

5

答案是尽可能

它总是比拥有子/多项目/CSS/上下文选择器性能更高,并且是性能最快的遍历机制。

jsPerf 来说明我的意思

您甚至可以考虑不使用它的唯一情况是,如果您只想选择直接子项,并且这些子项恰好与您不想选择的子项具有相同的类。这是一份工作.children(),但非常罕见。

于 2013-10-09T20:53:58.680 回答
5

这取决于你选择什么。

随着选择的元素数量的$('tr')增加,.find将变得更加昂贵。

一般来说,最好做任何会导致接触最少元素的事情。当您只处理 2 个元素(父元素和子元素)时,.find 显然会更快,因为它只是一个父元素获取它的子元素并过滤到选择器。但是当有 200 个父母时,它必须遍历所有 200 个并在每个中搜索孩子。通过使用选择器开始,你永远不会触及所有的父母,你只是直接进入子元素。即使那样,一个与另一个的性能也会因浏览器而异。

花更少的时间担心这些微优化,直到它成为您要解决的真正问题,然后解决那个问题,而不是试图找出要遵循的一般规则。

于 2013-10-09T21:20:34.130 回答
1

.find()只是用于搜索代表 DOM 元素的 jQuery 对象的后代。

一个示例用例是将表示表单元素的 jQuery 对象传递给表单解析函数,然后.find()用于从表单的子输入中获取不同的值。

每次你想要抓取一个元素时,不要将表单转换为一个 jQuery 对象,而是将 jQuery 表单对象分配给一个变量,然后使用它.find()来抓取输入。

在代码中,这是:

var $form = $('#myFormId'),
    firstName = $form.find('input[name="firstName"]').val(),
    lastName = $form.find('input[name="lastName"]').val();

比这个便宜:

var firstName = $('#myFormId input[name="firstName"]').val(),
    lastName = $('#myFormId input[name="lastName"]').val();

使用它也更便宜.children(),请参阅此参考,除非您正在搜索的项目是您正在操作的 jQuery 对象的直接子项。

希望这是有道理的:)

于 2013-10-09T21:06:40.983 回答
0

上面的答案很好,但只想添加 .find() 是基于后代的搜索。所以它会找到被选中的 Dom 元素的所有子元素。

于 2013-10-09T20:58:13.350 回答