2011-06-06 8 views
7

मैंने जिस समस्या का सामना किया है, उसे चित्रित करने के लिए मैंने एक सरल परीक्षण पृष्ठ स्थापित किया है। संक्षेप में, यह काम करता है के रूप में उम्मीद (पाठ बोल्ड में स्वरूपित किया गया है, लाल रेखांकित):सीएसएस चयनकर्ता संख्यात्मक विशेषता मूल्यों से मेल नहीं खा सकते हैं? क्यूं कर?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc=x1] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc=x1>hello</div> 
    </body> 
</html> 

और यह नहीं है (पाठ काला रहता है, कोई स्वरूपण लागू): मैं

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc=1] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc=1>hello</div> 
    </body> 
</html> 

केवल एक चीज है दो उदाहरण के बीच बदल 1.

को विशेषता मान x1 से (दोनों सीएसएस और HTML में) तो ऐसा लगता है कि आप संख्यात्मक विशेषताओं के खिलाफ मैच नहीं कर सकते हैं।

किसी को भी यह क्यों ... बहुत ... उपयोगी ... सुविधा ... मौजूद किसी भी विचार है?

उत्तर

10

लपेटें स्ट्रिंग, कोट में मैच के लिए ...

[abc="1"] { 
    ... 
} 

jsFiddle

विशेषता मान सीएसएस पहचानकर्ता या तार होना चाहिए।

Source

जब आप इसे उद्धरण में लपेट, आप एक string मैच के लिए यह कह रहे हैं।

जब आप इसे बोली नहीं है, यह एक identifier की तलाश में है।

सीएसएस में, पहचानकर्ता (तत्व नाम, वर्ग, और चयनकर्ताओं में ID शामिल हैं) केवल अक्षर [एक-zA-Z0-9] और आईएसओ 10646 वर्ण U + 00A0 और उच्च, के साथ साथ हाइफन शामिल कर सकते हैं (-) और अंडरस्कोर (_); वे अंक, दो हाइफ़न या एक हाइफ़न के साथ एक अंक के साथ शुरू नहीं कर सकते हैं।

+0

। क्षमा करें, मुझे नहीं पता कि मैं इसे कैसे याद कर सकता हूं !! मैंने सोचा कि मैंने उद्धरण के साथ इसका परीक्षण किया था लेकिन उद्धरणों के साथ इसे आजमाने के दौरान मैंने कुछ छोड़ दिया होगा। जब ऐसा होता है तो मुझे यह पसंद नहीं है, मैं आपके लिए नम्र और आभारी हूं और दूसरों ने मुझे यह इंगित किया है। –

+0

धन्यवाद पर – Rolf

2

यह स्ट्रिंग के चारों ओर "" उद्धरण के साथ काम करता है।

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc="1"] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc="1">hello</div> 
    </body> 
</html> 
1

आप एक विशेषता को समझने में सही हैं जो किसी संख्या से शुरू नहीं हो सकता है।

क्यों यह कुछ ब्राउज़रों में सही ढंग से काम कर सकते हैं, यह संभावना नहीं करना चाहिए।

मुझे लगता है कि यह करने के लिए जवाब देने के लिए क्यों एक चर, अधिकांश भाषाओं में, एक संख्या के साथ शुरू नहीं कर सकते इसी तरह की है। (Why can't variable names start with numbers?)

"क्योंकि तब अंकों के एक स्ट्रिंग के रूप में अच्छी तरह से एक वैध पहचानकर्ता होगा एक वैध संख्या के रूप में"

मैं भी की जवाब के बारे में अधिक के लिए इस उत्तर देखना होगा क्यों: Can XHTML and HTML class attributes value start with a number?

लेकिन, मेरे लिए यह एसजीएमएल और लेक्सर्स से संबंधित ऐतिहासिक परिणामों का एक संयोजन है जो एचटीएमएल और सीएसएस को पार्स और प्रस्तुत करते हैं।

1

एचटीएमएल विशेषताएँ तार हैं।समस्या यह है कि सीएसएस दुभाषिया कैसे एक unquoted संख्या का अर्थ है के साथ उत्पन्न होता है। यह इसे एक संख्या के रूप में पहचाना जाएगा, न कि स्ट्रिंग, इसलिए यह कभी भी HTML विशेषता के स्ट्रिंग मान से मेल नहीं खा सकता है।

आपको उद्धरण चिह्नों में जो मूल्य खोज रहे हैं उसे संलग्न करने की आवश्यकता होगी ताकि इसे पहले से सुझाए गए स्ट्रिंग के रूप में सही ढंग से व्याख्या किया जा सके। यदि मान एक गैर-संख्यात्मक चरित्र से शुरू होता है, तो इसे एक स्ट्रिंग के रूप में टोकननाइज़ किया जाएगा, यही कारण है कि पहला उदाहरण काम करता है।

http://www.w3.org/TR/CSS2/selector.html#attribute-selectors

इसके अलावा एफएफ 4.0.1 और IE 8.
संबंधित मुद्दे