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

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


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

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


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

最佳答案

这种事情通常取决于浏览器,但我会使用第3个。

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

在不支持qsa的浏览器中,我认为Sizzle在页面上找到了所有p元素,并遍历其祖先以查看是否存在#a元素。

$('#a p')




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

$('p', $a_div)   // becomes $a_div.find('p')




无论是通过querySelectorAll还是getElementsByTagName,您都是从DOM中的已知点开始,并且仅在其中进行搜索,因此我敢打赌,这通常是最快的。

$a_div.find('p')

10-08 04:19