一對夫婦的實際問題,這些選擇器中的哪一個可能會更快?
鑑於以下兩個將回到同一個結果集
$("#MyTable tr");
$("tr", "#MyTable");
有在使用父子CSS選擇器公約或指定上下文之間的任何性能差異而不是選擇?
另外,考慮到我可以保證一個tr將是一個表的直接孩子,這會改善上述表現嗎?
$("#MyTable>tr")
一對夫婦的實際問題,這些選擇器中的哪一個可能會更快?
鑑於以下兩個將回到同一個結果集
$("#MyTable tr");
$("tr", "#MyTable");
有在使用父子CSS選擇器公約或指定上下文之間的任何性能差異而不是選擇?
另外,考慮到我可以保證一個tr將是一個表的直接孩子,這會改善上述表現嗎?
$("#MyTable>tr")
到目前爲止,最快的三個是:
$("#MyTable > tr")
因爲你是選擇由編號的元素參考的直系後裔,所以選擇是很直接的。
編輯:@redsquare指出,上述功能不適用於Firefox和Chrome瀏覽器,因爲這些瀏覽器會將tbody元素附加到表格中。
背景選擇器被基本上轉化爲「查找」,所以最慢的第2的是:
$("tr", "#MyTable");
,因爲它被轉化成像這樣之前的任何選擇發生:
$('#MyTable').find('tr');
當然,如果你自己做基準測試,這可能對你有很大的好處。
這裏是以前問的SO一些相關的問題:
「因爲我可以保證TR將是一個表的直接子」 - 不要賭。瀏覽器應該(除了XHTML模式)暗示表和錶行之間的tbody元素。 – Quentin 2009-08-19 10:33:28
@David Dorward - 公平的評論。雖然如果我們不能做出這個基本的假設,那麼不會產生這個選擇器,而.children()函數是多餘的? – 2009-08-19 10:43:12
不需要。它只是意味着在處理含有隱式開始標記的元素時需要小心。人們通常不會將開始標籤包含在內的是tbody,只是明確表示它在那裏,您可以不用擔心。 – Quentin 2009-08-19 13:25:22