2010-10-11 52 views
4

this問題的後續行動,我有以下2個選項:jQuery選擇器:抓取子集的子集更快?

$("tr td").slice(3, 6); 

,可能是這樣的(算法來說,我的意思是,我知道作出新的查詢字符串的每個元素是有點傻):

var subset = $("tr td:nth-child(4)"); 
for(var i=4; i<7; i++) subset.add("tr td:nth-child("+i+")"); 

哪個更有效?會有另一種更有效的解決方案嗎?

+0

我認爲有人必須成爲jQuery的主要貢獻者才能真正能夠在不檢查的情況下做出回答。基準嗎? – Matchu 2010-10-11 12:58:27

+1

在我看來,你會希望在那裏有一個'>'子選擇器,所以jQuery只查找''的直接子元素'​​'。 '$(「tr> td」)' – user113716 2010-10-11 13:04:07

+0

是的,的確如此。 – Hamster 2010-10-11 13:10:29

回答

3

第一個($("tr td").slice(3, 6))執行速度會快得多,因爲它是單個選擇器引擎調用,但是與往常一樣,請對其進行測試!

我在這裏設立一個性能測試,因此您可以檢查這兩個(和其他答案)自己:http://jsperf.com/slice-performance-test

+0

有趣的網站。 – Hamster 2010-10-11 13:05:39

0

在第1碼,你計算$('tr td')一次得到片。

在第二個代碼中,您計算​​$('tr td') 4次,然後在每次提取第4到第7個孩子。

因此,第一個代碼更快。事實上,閱讀也更容易。

+0

是的,但我在談論算法性能。我想我假設每個查詢將獲取每個元素,就好像簡單地引用數組中的元素一樣。 – Hamster 2010-10-11 13:09:51