2013-07-10 4 views
7

क्या क्वेरी चयनकर्ता आईडी में चरित्र अवधि (।) का समर्थन करता है?क्या क्वेरी चयनकर्ता आईडी में चरित्र अवधि (।) का समर्थन करता है?

मेरा मतलब है अगर मैं नीचे की तरह एक तत्व संलग्न:

var div = document.createElement('div'); 
div.id='my.divid'; 
document.body.appendChild(div); 

और फिर मैं नीचे की तरह querySelectorAll का उपयोग करें:

document.querySelectorAll('#my.divid'); 

मैं कुछ भी नहीं मिला!

तो अवधि आईडी के लिए कानूनी चरित्र है, और querySelectorAll ऑफ़लाइन विधि है जो फ़ायरफ़ॉक्स प्रदान की जाती है, मैं विधि को निष्क्रिय नहीं कर सकता हूं, आईडी में अवधि (।) का समर्थन नहीं करता है। क्या मैंने कुछ गलती की?

धन्यवाद!

उत्तर

0

querySelectorAll में एक अवधि का अर्थ है कि आप एक सीएसएस कक्षा निर्दिष्ट कर रहे हैं। आपके मामले में querySelectorAllid "मेरा" और एक सीएसएस वर्ग "विभाजन" के साथ एक DOM तत्व खोजने का प्रयास कर रहा है। querySelectorAll कैसे पता चलेगा कि इस बार आप आईडी द्वारा तत्व चाहते हैं, न कि वर्ग द्वारा? यह उचित है कि आप उचित id एट्रिब्यूट करें ताकि विधि को भ्रमित न किया जा सके। हालांकि एक अवधि की अनुमति है, सबसे अच्छा अभ्यास यह है कि आप अधिकतर समय से बचें ताकि आप अन्य पुस्तकालयों जैसे jquery इत्यादि को भ्रमित न करें

+0

तो इसका मतलब है क्वेरी चयनकर्ता सभी आईडी विशेषता में अवधि का समर्थन नहीं करता है? अगर मैं आईडी में सम्मिलित अवधि चाहता हूं, तो मैं इसे क्वेरी से नहीं प्राप्त कर सकता हूं, या मुझे आईडी()) को आईडी में बैकस्लैश और अवधि (\।) में बदलना चाहिए, क्या यह सही है? – user2155362

+5

आपको "\\।" का उपयोग करना होगा इससे बचने के लिए, मुझे लगता है। – mohkhan

+2

@ user2155362: आपने मेरा अपवादित उत्तर याद किया होगा, जहां आपने अपनी टिप्पणी पोस्ट करने से 10 मिनट पहले मूलभूत रूप से जो कुछ भी पूछा था, उसे समझाया था। – BoltClock

13

आप को याद है कि . एक वर्ग चयनकर्ता का प्रतिनिधित्व करता है, तो चयनकर्ता #my.divid आईडी my और एक वर्ग divid साथ एक तत्व का प्रतिनिधित्व करता है, आईडी my.divid साथ की जरूरत है नहीं एक तत्व। तो, निम्नलिखित तत्व अपने चयनकर्ता से मिलान किया जाएगा:

var div = document.createElement('div'); 
div.id = 'my'; 
div.className = 'divid'; 
document.body.appendChild(div); 

आप के रूप में आप ऊपर दिए गए है, तो आप अवधि से बचने के लिए की जरूरत आईडी my.divid के साथ एक तत्व का चयन करने की जरूरत है:

document.querySelectorAll('#my\\.divid'); 

ध्यान दें कि डबल बैकस्लैश इसलिए है क्योंकि यह एक जेएस चयनकर्ता स्ट्रिंग है; एक सीएसएस नियम में आप एक बैकस्लैश का उपयोग करेंगे: #my\.divid

+0

डबल स्लैश @ बोल्टक्लॉक – gumuruh

0

मुझे पूरा यकीन है कि किसी आईडी में कानूनी भी नहीं है। और सीएसएस में, इसे इस तरह से कुछ के रूप में व्याख्या किया जाएगा: <div id="my" class="divid"></div>। आप इसे इस तरह से शैली कभी नहीं बना सकते। और चूंकि querySelectorAll एक ही पार्सर (मुझे लगता है) का उपयोग करता है, तो आपको वही परेशानी होगी।

+1

के उपयोग को स्पष्ट करने के लिए धन्यवाद एचटीएमएल 5 में, एक [आईडी] (http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute) में कम से कम एक वर्ण और कोई सफेद स्थान होना चाहिए। इसके अलावा, कुछ भी चला जाता है। एचटीएमएल 4.01 के प्रतिबंध चले गए हैं। प्रैक्टिस में, एचटीएमएल ने इसे आधिकारिक बनाने से पहले ब्राउजर को लगभग कुछ भी अनुमति दी है। – RobG

+1

कुछ नया सीखें। ऐसा नहीं है कि मुझे लगता है कि मैं अपने आईडी के लिए "।" जोड़ना शुरू कर रहा हूं, लेकिन यह जानना अच्छा है। यह भी नहीं पता था कि अब एक नंबर से शुरू करना ठीक था ... – kalley

+0

आमतौर पर आप क्या कर सकते हैं और * समझदार * क्या करने के बीच एक बड़ा अंतर है। :-) – RobG

संबंधित मुद्दे