有没有理由在'.class'上使用选择器'* .class'?

时间:2011-03-22 15:32:46

标签: jquery jquery-selectors

我在代码中找到了它,并且不知道在*.class选择器上使用.class选择器有什么意义。

4 个答案:

答案 0 :(得分: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 :(得分:1)

它们大致相同 - 星号仅进一步指定所述类的哪些对象应用选择。

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

答案 2 :(得分:0)

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

*是一个通配符,表示“将此应用于任何内容”,但这只是本机选择器行为。

然而,有人可能会在面对以下方面明确记录下来时添加它:

  

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

但是,只有当您的内部常规代码组织属于以下类型时,这才适用:

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

答案 3 :(得分:0)

没有任何优势 - 如果您将通配符与其他选择器一起使用,我认为存在性能问题:

  

警告:全部或通用,   选择器非常慢,除了   当它本身使用时。

除此之外 - 没有区别