【问题标题】:Is there any reason to use selector '*.class' over '.class'?有什么理由使用选择器'*.class'而不是'.class'?
【发布时间】:2011-03-22 15:32:45
【问题描述】:

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

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    无论是在 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 是等价的。

    【讨论】:

    • 重新性能,我认为这将是一个主要区别,但我认为 jQuery 在这种情况下对其进行了优化。 jsperf.com/starsss 是一个基本示例。我猜是因为调用只是 document.getElementsByClass 的基本包装器?
    • @yc: 有时 jQuery 可以将其交给getElementsByClass、getElementById 或querySelectorAll。即便如此,* 无论是由 jQuery 还是浏览器的选择器引擎处理,在微观上仍然非常缓慢。
    • 是的,完全是。完全没有理由在此处添加*。不费吹灰之力。 (+1)
    【解决方案2】:

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

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

    【讨论】:

    • 哪个浏览器不支持*?他还在谈论 jQuery。
    • @Rionmonster:也许不仅在旧版浏览器中,而且我认为每个浏览器都认为*.class 比.class 更具体。就像div.class
    • @Marnix: *.class 与 .class 具有相同的特异性。
    • @Rion 具体是什么旧浏览器?
    • 啊——我也看错了。以为他在谈论 CSS - 我将不得不改变它。
    【解决方案3】:

    不,没有理由指定 *.class 而不是 .class

    * 是一个通配符,意思是“将它应用到任何东西”,但这只是本机选择器的行为。

    但是,它可能是由试图明确记录在以下情况下的人添加的:

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

    但这只有在您的内部正常代码组织属于以下类型时才成立:

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

    等

    【讨论】:

      【解决方案4】:

      不会获得任何优势 - 我认为如果您将通配符与更多选择器一起使用,则会出现性能问题:

      警告:全部或通用, 选择器非常慢,除了 单独使用时。

      除此之外 - 没有区别

      【讨论】:

      • 我是这么认为的,但我认为 jQuery 在这种情况下优化了它。 jsperf.com/starsss,因为调用只是 document.getElementsByClass 的基本包装。
      猜你喜欢
      • 2018-01-04
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多