與僅添加ID(或單個標識符)相比,添加附加標識符的速度更快嗎?jQuery選擇器速度
例如
$('#element')
VS
$('#container #element')
或甚至更具體:
$('body div#container div#element')
?
與僅添加ID(或單個標識符)相比,添加附加標識符的速度更快嗎?jQuery選擇器速度
例如
$('#element')
VS
$('#container #element')
或甚至更具體:
$('body div#container div#element')
?
$('#element')
應該是最快的,然後是$('div')
。這些映射到本機功能document.getElementById
和document.getElementsByTagName
。任何更復雜的事情都必須通過複雜的腳本和文檔搜索。
除了IE6,7和8之外,$('.class')
也映射到新的document.getElementsByClassName
函數,但這比其他兩個函數要慢,如果瀏覽器不支持它,仍然需要通過Sizzle。
如果您已經擁有jQuery對象並執行.find('#element'),那該怎麼辦? ID應該是唯一的,所以它應該無關緊要,但我使用的是主幹,而不是使用全局jQuery而不是視圖綁定的jQuery(它使用.find()) –
是的,通過ID選擇應該是最快的,因爲jQuery(或Sizzle)可以直接使用getElementById
。否則,還必須評估選擇器的其餘部分,從右到左。
您應該儘量使用盡可能少的選擇器,以便正確識別您希望處理的元素。例如,如果element
是一個唯一的ID(因爲它應該是),那麼#element
將唯一地指定它,並且在解析和處理開銷中都會浪費任何東西。 (這同樣也適用於CSS樣式規則,當然,雖然在這種情況下,選擇的最佳選擇可能是使用jQuery時不同。)
實際調用
document.getElementById("element");
是最快的。
如果你真的想要一個jQuery對象,然後調用$(document.getElementById("element"));
@john_doe:不完全是,至少第三個[將得到所有'div'元素,然後過濾那些ID爲'element' ](http://jsfiddle.net/dFC4k/1/)。甚至在第二種情況下[jQuery測試'#element'是否是'#容器'的後代](http://jsfiddle.net/dFC4k/)。 –
@FelixKling:然後我誤讀了一篇文章(我找不到...),並在嘶嘶聲源中誤解了一條評論'//選擇一個快捷方式並設置上下文,如果根選擇器是ID //但如果內部選擇器是一個ID,它會更快)' - 感謝您的澄清 – Andreas