2010-03-21 13 views
6

अगर मैं एक ही आईडी के साथ अपने वेब पेज में एकाधिक तत्व शामिल करता हूं तो मैं वास्तव में क्या समस्याएं पैदा कर सकता हूं, यह जानने के लिए उत्सुक है?एचटीएमएल में एक आईडी आईडी के कई उदाहरणों का उपयोग करने के साइड इफेक्ट्स क्या हैं?

उदाहरण के लिए

:

<div id='someID'>Some Content</div> 
<div id='someID'>Some Other Content</div> 
+1

क्यों आप ऐसा करना चाहेगा? – RichardOD

+4

मुझे नहीं पता लेकिन यह जानना अच्छा लगता है कि मैं क्यों नहीं करता हूं। –

+1

मामूली टिप्पणी: यह एक स्वीकार्य HTML सम्मेलन है जो एकल मूल्यों को सीमित करने के लिए एकल मूल्यों के बजाय डबलक्वॉट्स का उपयोग करने के लिए है। – BalusC

उत्तर

7

जब आप जावास्क्रिप्ट से उन तत्वों को आजमाते हैं और संदर्भित करते हैं तो यह आप जिस तत्व का जिक्र कर रहे हैं उसे हल करने में सक्षम नहीं होंगे। आपके द्वारा चल रहे विशिष्ट जावास्क्रिप्ट दुभाषिया के आधार पर, आप या तो त्रुटियां प्राप्त कर सकते हैं, या अपरिभाषित व्यवहार - दोनों मामले अवांछनीय हैं।

एचटीएमएल स्पेक का कहना है कि आईडी को अद्वितीय होना चाहिए, इसलिए आपका एचटीएमएल अमान्य माना जाएगा और ब्राउज़र को क्विर्क मोड प्रतिपादन में वापस जाने का कारण बन सकता है, या यहां तक ​​कि पूरी तरह से आपके पृष्ठ को प्रस्तुत करने से इंकार कर सकता है (हालांकि यह संभव नहीं है, और सभी वर्तमान ब्राउज़र कुछ प्रस्तुत करेंगे - तकनीकी रूप से, यदि आप spec का पालन नहीं करते हैं तो ब्राउज़र को कुछ भी करने का कोई दायित्व नहीं है लेकिन आपके पृष्ठ को अस्वीकार कर दिया गया है)।

आप के बजाय वर्ग नाम का उपयोग पर विचार करना चाहिए अगर आप एक से अधिक तत्वों की पहचान के लिए कुछ करना चाहते हैं:

<div class="someClass">Some Content</div> 
<div class="someClass">Some Other Content</div> 

Blair कि नीचे टिप्पणी में बताया गया है अगर आप से वर्ग द्वारा तत्वों के लिए खोज करने के लिए की जरूरत है जावास्क्रिप्ट, आप एक आईडी के साथ निकटतम तत्व से जाकर खोज को तेज कर सकते हैं और यह भी बता सकते हैं कि नोड प्रकार किस प्रकार दिखता है।यह पहुँच गति मामलों का एक बहुत में तेजी से रख सकते हैं, लेकिन नकली आईडी का पर किसी भी नियम तोड़ने नहीं करता है:

HTML: 
<div id="myNearestID"> 
    <div class="someClass">Some Content</div> 
    <div class="someClass">Some Other Content</div> 
</div> 

JavaScript+JQuery: 
$('#myNearestID div.someClass') 
+0

सच है, हालांकि क्लास द्वारा तत्वों को लक्षित करने के लिए कोई मूल जावास्क्रिप्ट नहीं है। jQuery उनके पास जाने के लिए बहुत धीमी है, इसलिए यह बिल्कुल वही बात नहीं है। –

+0

मुझे बहुत तेज हो जाता है हालांकि यदि आप किसी आईडी के साथ निकटतम तत्व से जाते हैं और यह भी बताते हैं कि नोड प्रकार किस प्रकार दिखता है। इस मामले में '$ ('# myNearestID div.someClass')'। –

+0

@ user278457: हाँ, लेकिन यदि आप डुप्लिकेट आईडी का उपयोग करते हैं तो इसकी कोई गारंटी नहीं है कि यह भी काम करेगा। ऐसा लगता है कि आप दो वेबसाइटों के लिए एक ही यूआरएल का उपयोग करना चाहते हैं क्योंकि यह कई DNS लुकअप करने के लिए बचाता है। आपके पास क्या होगा, तेज़, या सही होगा। @Blair। अच्छा सुझाव। इसके लिए धन्यवाद, मैं इसे उत्तर में शामिल करूंगा। –

0

फिर जो एक नियंत्रण आप उल्लेख करने के लिए जब आप जावास्क्रिप्ट में कुछ इस तरह करते हैं: -

document.getElementById("someID") 
1

मैं कैसे ब्राउज़रों सीएसएस नियम प्रस्तुत करना यकीन नहीं है इस तरह के मामले में #someID टाइप करें (वे शायद इस तरह के सभी तत्वों पर नियम लागू करेंगे), लेकिन आप निश्चित रूप से जावास्क्रिप्ट और getElementById के साथ परेशानी में भाग लेंगे।

6

आईई आईडी का उपयोग कर किसी भी जावास्क्रिप्ट के साथ बड़ी समस्याएं होगी, यह मुख्य दुष्प्रभाव है।

कुल मिलाकर, आईडी विशिष्ट हैं, कल्पना प्रति ... ब्राउज़र निर्माता उनके कोड में यह धारणा बनाने के लिए नि: शुल्क है, और किसी भी कीड़े (जावास्क्रिप्ट, सीएसएस, आदि), जो अमान्य उन्हें शामिल एचटीएमएल से परिणाम .. .well, यह आपकी समस्या है :)

ब्राउज़र वास्तव में इसे ठीक करने के लिए बाध्य नहीं है, और मुझे नहीं लगता कि उन्हें या तो चाहिए।

1

मैंने कहीं और पढ़ा है कि आईई प्रत्येक तत्व के लिए एक आईडी के साथ एक वैश्विक चर बनाता है।

क्या मैं यह कहकर गलत हूं कि यह भी एक मुद्दा है?

0

मुझे नहीं लगता कि ब्राउज़रों में शिकायत करेंगे, लेकिन अन्य समस्याओं आप का पालन करेंगे कर रहे हैं:

  • पेज आईडी घोषणा dulicate को
  • जावास्क्रिप्ट का जो पृष्ठ पर चल रहा हो सकता है सही ढंग से काम करता है, तो वे इस समय के बाद से आईडी के आधार पर तत्वों पा रहे हैं बंद हो सकता है की वजह से मान्य नहीं हो सकता है, यह गलत तत्व मिल जाएगा
  • सीएसएस नियम appli #ID पर एड को उन सभी तत्वों को दोहराया जाएगा जिनके पास एक ही आईडी

मुझे लगता है कि ये सभी तत्वों में एक ही आईडी का उपयोग न करने की गारंटी देने के लिए पर्याप्त समस्याएं हैं।

एचटीएच।

1

एक जोड़े को अधिक अंक पहले ही उल्लेख किया नहीं।

टुकड़ा पहचानकर्ता: कैसे ब्राउज़र http://www.example.com#someID के लिए एक लिंक संभाल होगा?

आंतरिक संदर्भ: यदि कुछ इनपुट दो इनपुट तत्वों पर था, और आपके पास < लेबल "= someID" > था ... यदि उपयोगकर्ता लेबल पर क्लिक करता है, तो ब्राउज़र को यह तय करना होगा कि कौन से इनपुट को ध्यान केंद्रित करना चाहिए। (एचटीएमएल 5 में, यह पहला इनपुट माना जाता है, जो जरूरी नहीं है कि आप क्या चाहते हैं)। इसी प्रकार एआरआईए समर्थन के लिए, कुछ विशेषताओं जैसे एरिया-लैबेलबी और एरिया-वर्णित एक ही स्थान पर इंगित करने पर भरोसा करते हैं।

+0

मैंने 1994 में अपना एचटीएमएल सीखा, फिर वापस www.example.com # कुछ आईडी Section headline पर कूद जाएगा । क्या यह वर्षों से बदल गया? मुझे नहीं पता था कि आप यूआरएल में अपनी आईडी निर्दिष्ट करके एक टैग पर कूद सकते हैं। –

+1

हां। HTML4.01 कल्पना कहते हैं, "HTML दस्तावेज़ में गंतव्य एंकर निर्दिष्ट किया जा सकता है या तो एक तत्व से (नाम विशेषता के साथ यह नामकरण), या किसी अन्य तत्व से (आईडी गुण के साथ नाम देना)।" एचटीएमएल 5 में, "ए" तत्व पर "नाम" विशेषता अप्रचलित है। (http://dev.w3.org/html5/spec/obsolete.html#obsolete) – Alohci

+0

धन्यवाद! मुझे पहले एचटीएमएल 5 में इस बदलाव के बारे में पता नहीं था। – stefanglase

0

ब्राउज़र पागल हो जाना जब हम कोड-पीछे फ़ाइल में जावास्क्रिप्ट के माध्यम से संदर्भित कर रहे हैं या कहीं और होगा।

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