2010-10-11 56 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