2011-11-05 70 views
3

與僅添加ID(或單個標識符)相比,添加附加標識符的速度更快嗎?jQuery選擇器速度

例如

$('#element')

VS

$('#container #element')

或甚至更具體:

$('body div#container div#element')

+0

@john_doe:不完全是,至少第三個[將得到所有'div'元素,然後過濾那些ID爲'element' ](http://jsfiddle.net/dFC4k/1/)。甚至在第二種情況下[jQuery測試'#element'是否是'#容器'的後代](http://jsfiddle.net/dFC4k/)。 –

+0

@FelixKling:然後我誤讀了一篇文章(我找不到...),並在嘶嘶聲源中誤解了一條評論'//選擇一個快捷方式並設置上下文,如果根選擇器是ID //但如果內部選擇器是一個ID,它會更快)' - 感謝您的澄清 – Andreas

回答

3

$('#element')應該是最快的,然後是$('div')。這些映射到本機功能document.getElementByIddocument.getElementsByTagName。任何更復雜的事情都必須通過複雜的腳本和文檔搜索。

除了IE6,7和8之外,$('.class')也映射到新的document.getElementsByClassName函數,但這比其他兩個函數要慢,如果瀏覽器不支持它,仍然需要通過Sizzle。

+0

如果您已經擁有jQuery對象並執行.find('#element'),那該怎麼辦? ID應該是唯一的,所以它應該無關緊要,但我使用的是主幹,而不是使用全局jQuery而不是視圖綁定的jQuery(它使用.find()) –

5

是的,通過ID選擇應該是最快的,因爲jQuery(或Sizzle)可以直接使用getElementById。否則,還必須評估選擇器的其餘部分,從右到左。

1

您應該儘量使用盡可能少的選擇器,以便正確識別您希望處理的元素。例如,如果element是一個唯一的ID(因爲它應該是),那麼#element將唯一地指定它,並且在解析和處理開銷中都會浪費任何東西。 (這同樣也適用於CSS樣式規則,當然,雖然在這種情況下,選擇的最佳選擇可能是使用jQuery時不同。)

1

實際調用

document.getElementById("element");

是最快的。

如果你真的想要一個jQuery對象,然後調用$(document.getElementById("element"));

Benchmark