是否有任何理由在'.class'上使用selector'* .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
是等价的。
它们大致相当 - 星号仅进一步指定将该选择应用于哪个对象。
.class // Selects all of the specific class
*.class // Selects all of the specific class - where * can be a div, li, etc.
没有,没有任何理由指定*.class
超过.class
*
是通配符,并表示“这适用于任何”不过这只是本机选择行为。
但是,它可能已被人谁试图在面前明确书面补充说:
不要选择特定元素类型,但匹配所有元素类型
但是,如果您的内部正常的代码组织的类型为这只成立:
$('div.class')
$('a.class')
$('a:first')
等
就没有优势获得了 - 我觉得这是一个性能问题,如果您使用其它选择通配符:
比注意:所有或通用, 选择是非常缓慢,除了自己使用 。
其他 - 没有区别
我认为是这样,但我认为在这种情况下,jQuery会优化它。 http://jsperf.com/starsss,因为这个调用只是'document.getElementsByClass'的基本包装。 – Yahel 2011-03-22 15:40:43
重新性能,我认为这是一个主要的区别,但我认为jQuery在这种情况下优化它。 jsperf.com/starsss是一个基本的例子。我猜是因为这个调用只是document.getElementsByClass的一个基本包装? – Yahel 2011-03-22 15:42:55
@yc:有时jQuery可能会把它交给'getElementsByClass','getElementById'或'querySelectorAll'。尽管如此,无论是由jQuery还是由浏览器的选择器引擎处理,“*”仍然在显微镜下仍然非常慢。 – BoltClock 2011-03-22 15:44:43
是的,完全。根本没有理由在这里添加'*'。想都不用想。 (+1) – Yahel 2011-03-22 15:53:31