jQuery选择器性能:$('#a p')与$('p',$ context)对比$ context.find('p')

时间:2011-06-18 18:46:03

标签: jquery performance

如果我已经在我的变量$a_div中获得了以下标记中的DIV的jQuery对象,我想找到Ps

<div id="a">
    ...
    <p>...</p>
    ...
</div>

在DIV中选择P元素的这些方法之间是否存在显着的性能差异?

$('#a p')
$('p', $a_div)
$a_div.find('p')

如果是这样,你知道为什么吗?

2 个答案:

答案 0 :(得分:5)

这种事情通常依赖于浏览器,但我会使用第三种。

首先,querySelectorAll的浏览器会使用它,因此性能应该很好。

在不支持qsa的浏览器中,我认为Sizzle会在页面上找到所有 p个元素,并遍历他们的祖先以查看是否有{{1}元素。

#a

我根本不会使用第二个,因为它会在后台更改为第三个。

$('#a p')

无论是通过$('p', $a_div) // becomes $a_div.find('p') 还是querySelectorAll,您都是从DOM中的已知点开始,只在其中搜索,所以我敢打赌,这通常会最快。

getElementsByTagName

答案 1 :(得分:2)

您可以随时测试 - http://jsperf.com/some-jquery-selectors-performance-tests

第二个似乎比第一个快三倍,第三个稍微多一点。这肯定会因HTML结构的其余部分而有所不同,但我非常确定第一个将始终保持最慢。