2011-03-22 266 views

回答

11

无论在jQuery(Sizzle)选择器上下文还是CSS选择器上下文中都没有意义。在元素匹配和特异性方面,*.class.class都是等价的。

*字符仅在被自身用于引用任何元素时才有意义;这意味着你使用任何其他简单的选择器而没有类型选择器。 即使那么,如果有的话,您很少会发现自己需要将事件挂钩或操作DOM上每个元素的属性。

如果你打算使用类,伪类,ID等,那么没有通用选择器的地方,因为选定的元素将被相应地过滤掉。

此外,这里是一个使用*有其他选择的一个缺点,从jQuery documentation报价:

注意:所有或通用,选择是极其缓慢的,在使用时其本身除了。

这里还有什么Selectors spec说:

如果*代表的通用选择器(即没有命名空间前缀)是不是一个sequence of simple selectors选择的唯一部件或后面紧跟着一个pseudo-element,那么*可能被忽略,并且通用选择器的存在隐含。

实例:

  • *[hreflang|=en][hreflang|=en]是等价的,
  • *.warning.warning是等价的,
  • *#myid#myid是等价的。
+1

重新性能,我认为这是一个主要的区别,但我认为jQuery在这种情况下优化它。 jsperf.com/starsss是一个基本的例子。我猜是因为这个调用只是document.getElementsByClass的一个基本包装? – Yahel 2011-03-22 15:42:55

+0

@yc:有时jQuery可能会把它交给'getElementsByClass','getElementById'或'querySelectorAll'。尽管如此,无论是由jQuery还是由浏览器的选择器引擎处理,“*”仍然在显微镜下仍然非常慢。 – BoltClock 2011-03-22 15:44:43

+0

是的,完全。根本没有理由在这里添加'*'。想都不用想。 (+1) – Yahel 2011-03-22 15:53:31

1

它们大致相当 - 星号仅进一步指定将该选择应用于哪个对象。

.class // Selects all of the specific class 
*.class // Selects all of the specific class - where * can be a div, li, etc. 
+1

什么浏览器不支持'*'?他还在谈论jQuery。 – BoltClock 2011-03-22 15:35:43

+0

@Rionmonster:可能不仅在旧版浏览器中,但每个浏览器都会将'* .class'视为比'.class'更具体。我认为。就像'div.class' – Marnix 2011-03-22 15:35:47

+2

@Marnix:'* .class'与'.class'具有同等的特异性。 – BoltClock 2011-03-22 15:36:10

0

没有,没有任何理由指定*.class超过.class

*是通配符,并表示“这适用于任何”不过这只是本机选择行为。

但是,它可能已被人谁试图在面前明确书面补充说:

不要选择特定元素类型,但匹配所有元素类型

但是,如果您的内部正常的代码组织的类型为这只成立:

$('div.class') 
$('a.class') 
$('a:first') 

0

就没有优势获得了 - 我觉得这是一个性能问题,如果您使用其它选择通配符:

注意:所有或通用, 选择是非常缓慢,除了自己使用 。

其他 - 没有区别

+0

我认为是这样,但我认为在这种情况下,jQuery会优化它。 http://jsperf.com/starsss,因为这个调用只是'document.getElementsByClass'的基本包装。 – Yahel 2011-03-22 15:40:43

相关问题