【发布时间】:2011-03-22 15:32:45
【问题描述】:
我在代码中找到它,不知道使用*.class 选择器而不是.class 选择器有什么意义。
【问题讨论】:
我在代码中找到它,不知道使用*.class 选择器而不是.class 选择器有什么意义。
【问题讨论】:
无论是在 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是等价的。
【讨论】:
getElementsByClass、getElementById 或querySelectorAll。即便如此,* 无论是由 jQuery 还是浏览器的选择器引擎处理,在微观上仍然非常缓慢。
*。不费吹灰之力。 (+1)
它们大致相同 - 星号仅进一步指定将选择应用于所述类的哪些对象。
.class // Selects all of the specific class
*.class // Selects all of the specific class - where * can be a div, li, etc.
【讨论】:
*?他还在谈论 jQuery。
*.class 比.class 更具体。就像div.class
*.class 与 .class 具有相同的特异性。
不,没有理由指定 *.class 而不是 .class
* 是一个通配符,意思是“将它应用到任何东西”,但这只是本机选择器的行为。
但是,它可能是由试图明确记录在以下情况下的人添加的:
不要选择特定的元素类型,而是匹配所有元素类型
但这只有在您的内部正常代码组织属于以下类型时才成立:
$('div.class')
$('a.class')
$('a:first')
等
【讨论】:
不会获得任何优势 - 我认为如果您将通配符与更多选择器一起使用,则会出现性能问题:
警告:全部或通用, 选择器非常慢,除了 单独使用时。
除此之外 - 没有区别
【讨论】:
document.getElementsByClass 的基本包装。