2014-02-12 36 views

回答

8

第一個非常快,因爲jQuery在識別模式(使用正則表達式)時內部使用getElementById

第二個要求jQuery迭代所有具有ID的對象。這很慢。當jQuery在這種情況下找到一個匹配時,甚至不會停止迭代。

的唯一合法理由使用[id...選擇是當你不只是一個確切的ID進行搜索,比如你可能要搜索的ID使用$('[id^=something]')"something"開始的所有元素。

假設你有一個有效的HTML(no reused id)和一個有效的id,你仍然可以在$('#'+someId)上遇到問題(例如,當你的id包含一個引號或任何會破壞Sizzle模式識別系統的東西)。在這種情況下,請使用$(document.getElementById(someId))


按照您的評論:是的,在一個ID的"@"使得它不可能灒(jQuery的選擇器引擎)瞭解您的選擇。嘶嘶聲使用以下正則表達式:

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, 

/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/.test('#[email protected]')回報false

+0

這裏是一個性能測試。 http://jsperf.com/id-vs-class-vs-tag-selectors/2 –

+0

破壞:你最後一段釘住它!我在我的ID中有@這可能是問題嗎? – pestacio

+0

@pestacio是的。請參閱編輯。 –