2011-05-23 92 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