2011-03-22 245 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

相關問題