2011-05-23 84 views
1

只是在這裏拋出這個問題,因爲它讓我思考今晚。帶標籤vs無標籤在jQuery中的選擇

我聽說在此之前,它是方式更好包括HTML標記成時,你可以,因爲它通過,以及踢了選擇性能,告訴jQuery的什麼HTML標籤來尋找這樣它不jQuery選擇」不要搜索文檔中的所有內容。 (即去$('div.someclass')而不是$('.someclass')時,你可以。)

我的問題是,如何真現,這是,使用jQuery(目前1.6.1)的最新版本?

我甚至不確定這個概念是否出現在Sizzle之前(甚至不確定Sizzle是否有助於jQuery在這方面表現更好)。

當然,良好的編碼習慣就決定了我包括HTML標記時,我可以只是爲了讓事情說清楚,但有一個很灰色地帶對我來說,當我更願意去

$('.someclass') 

只是因爲我不想去

$('div.someclass, a.someclass, p.someclass, img:nth-child(3n+2).someclass') 

完全理論只有花花公子。我知道我可以去$('div,a,p,img:nth-child(3n+2)').filter('.someclass')

編輯

在一個有點相關的說明,我繼續與標籤製作perf tests VS無標籤的選擇(感謝Raynos),以及看似無標籤的選擇是顯著比更有益FF和Chrome上的標籤選擇。在IE8上,帶標籤的速度還是比較快,但是從邊緣看起來,它在其他瀏覽器上的替代品已經完全黯然失色。嗯。

+2

'.filter(」。SomeClass的)' – BoltClock 2011-05-23 18:50:45

+0

@BoltClock〜噢,好抓。 +1:D – 2011-05-23 18:52:38

+1

我會*認爲*取決於瀏覽器。如果有一個本地選擇器引擎或getElementsByClassName,那麼不指定標籤名稱可能會更快,因爲每個元素需要檢查的次數較少。如果OTOH,jQuery沒有本地代碼來回退,那麼它會更快,如果它可以首先縮小與getElementByTagName的搜索範圍。 – Quentin 2011-05-23 18:54:24

回答

1

$('.someclass')應該快了很多,然後$("div.someclass, p.someclass")

這是唯一值得被特定的,如果它不拓寬查詢。

Benchmark

+0

感謝您的基準鏈接+網站以及;我知道我將在未來幾天頻繁訪問該網站。 :d – 2011-05-23 19:16:26