2012-01-29 77 views
1

以下選擇器的寫入方式有什麼關係?它validates both waysW3 spec seems silent上的引號問題。雙向驗證時的「最佳」方式

input[type=text] 

或者

input[type='text'] 

我已經看到了它的工作左右逢源,而只是想知道它總是有效的或者CSS或jQuery的兩種方式?

那麼使用引號只是一個偏好問題?語義? CSS版本?

我們有兩種方法,因爲向後兼容性?如果是這樣,哪種方式最好呢?

儘管the accepted answer to this other SO question,我想這...

input[type='text'] 
+0

在jQuery中,引號是強制性的。 – 2012-01-29 01:55:31

+0

是關於jQuery或CSS或兩者的問題嗎?如果這是一個純粹的CSS問題,考慮到您對jQuery完全不相關的驗證問題,這是http://stackoverflow.com/questions/5578845/css-attribute-selectors-the-rules-on-quotes-or -none和http://stackoverflow.com/questions/3851091/do-values-in-css-attribute-selector-values-need-to-be-quoted – BoltClock 2012-01-29 20:33:43

+0

@BoltClock,我真的很感興趣,因爲他們分享很多選擇器規則...雖然我的描述集中在CSS上,因爲我只假定這是選擇器規則的起源。我也承認我從來沒有試圖在我的jQuery中忽略''''看看會發生什麼。 **感謝您**提供額外的閱讀材料。 – Sparky 2012-01-29 20:46:10

回答

4

我總結一句話這樣說:

  • 對於人物的一些序列(合法的標識符),則不需要引號。
  • 對於所有其他字符序列(如任何以數字開頭的任何字符),您必須使用引號。
  • 如果你知道什麼構成legal CSS identifier,那就是你所擁有的,你可以不用引號。
  • 如果你知道你所擁有的不是一個標識符,你必須加上引號。
  • 如果您不想考慮它並希望始終如一地使用它,請使用引號。

[type=text],你可以,如果你想因爲text是合法的CSS標識符離開過引號。

我個人更喜歡一致性,而不必考慮它,而不是犯錯誤的機會,所以我總是放在引號中。

1

我會用input[type='text']前進。

+0

您能否詳細說明我們擁有這兩種方法的原因,以及W3規範中是否有任何確鑿的結論。謝謝! – Sparky 2012-01-29 00:24:41

+0

我剛纔看了[選擇器的CSS級別3](http://www.w3.org/TR/selectors/#attribute-selectors),看來你可以使用其中一種。我個人使用單引號是因爲我所有的團隊都這樣做。我也在我的JavaScript中使用單引號。爲了保持一致性,團隊統一進行。 – 2012-01-29 00:34:18

3

根據CSS規範(版本23):

屬性值必須是標識符或字符串。

字符串是雙引號或單引號,[type="text"],而標識符,[type=text]被定義是這樣的:

在CSS中,標識符(包括元素名,類和在選擇器ID)的只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高字符,再加上連字符( - )和下劃線(_);他們不能以數字,兩個連字符或連字符後跟數字開頭。標識符也可以包含轉義字符和任何ISO 10646字符作爲數字代碼(參見下一項)。例如,標識符「B & W?」可寫成「B \ & W \?」或「B \ 26 W \ 3F」。

簡而言之,無論哪種方式,這是一個偏好問題。字符串的優點(即引用屬性值)是爲了保持一致性;每個值都可以表示爲一個字符串,但並不是所有東西都可以表示爲一個標識符。您可以通過this page運行值來檢查您是否需要報價。

+0

謝謝你的出色答案,但我無法弄清楚如何使用你引用的[那個頁面](http://mothereff.in/unquoted-attributes)。無論我在框中輸入什麼內容,它都假定它是用於'href'屬性的。我想我不希望它說「'文本」'當它清楚地通過了CSS驗證時是無效的。 – Sparky 2012-01-29 01:14:12

+0

該網站預計未引用的屬性。你輸入的內容等同於'type =「\」text「\」'。它只是用href作爲例子 - 價值本身就是被審查的內容,而不是屬性。 – Dennis 2012-01-29 02:11:07