2013-09-06 6 views
21

मैंने सीखा कि घोंसला एंकर टैग मानक अनुरूप HTML नहीं है।नेस्टेड एंकर टैग अवैध क्यों हैं?

डब्ल्यू 3 से

:

लिंक और एंकर द्वारा एक तत्व नेस्ट नहीं किया जाना चाहिए परिभाषित; एक तत्व में कोई अन्य तत्व नहीं होना चाहिए।

चूंकि डीटीडी लिंक तत्व को खाली होने के लिए परिभाषित करता है, इसलिए लिंक तत्वों को घोंसला नहीं किया जा सकता है।

यह this question में चयनित जवाब में सुझाव दिया बस होगा एंकर घोंसले से अप्रत्याशित व्यवहार बनाने का एक मौका के अधिक होता है उन लोगों के रूप विकल्प की तरह प्रतीत होता है!

यह जेएस में पृष्ठ को रीडायरेक्ट करने के लिए ऑनकिक ईवेंट हैंडलर बनाने के लिए ओवरकिल जैसा लगता है। स्क्रिप्ट समाधान का उपयोग करके उल्लेख नहीं करना स्क्रिप्ट के साथ ब्राउज़ करने वाले उपयोगकर्ताओं के लिए समस्याएं पैदा करेगा।

संपादित

क्या दिलचस्प है कि मैं एक fiddle पर काम कर रहा था प्रदर्शित करने के लिए था और मैं अनदेखी की थी कि क्रोम वास्तव में इस तरह के रूप में डोम पुनर्गठन किया गया था:

<div id="container"> 

    <a href="http://yahoo.com"></a> 
    <div class="parent"> 
     <a href="http://yahoo.com">Parent Element</a> 
     <a href="http://google.com"> 
      <div class="child">Child Element</div> 
     </a> 
     <a href="http://bing.com"> 
      <div class="child">Other Child</div> 
     </a> 
    </div> 

</div> 

मैं क्योंकि मैं इस अनदेखी होवर काम कर रहा था और मेरे माउस को पाठ पर था। अब यह जानना मेरे प्रश्न को जरूरी नहीं बदलता है, लेकिन यह निश्चित रूप से दर्शाता है कि यह जिस तरह से मैंने सोचा था, वह भी काम नहीं करता है।

+5

यदि घोंसले वाले एंकर होते हैं तो अस्पष्टता है कि आंतरिक एंकर –

+3

@ एक्सप्लोजियनपिल के क्लिक से एंकर को प्रभावित किया जाना चाहिए, एंकर पर क्लिक किए जाने पर बिंदु पर घोंसले में सबसे निचले एंकर पर क्लिक नहीं किया जा सकता था? – Renan

+0

@ रेनान मैं सहमत हूं। ऐसा लगता है कि क्रोम और लेआउट फ्लो में इस तरह से काम करना प्रतीत होता है जब तक आप सीएसएस के साथ कुछ अजीब चीजें नहीं कर रहे थे। –

उत्तर

31

ध्यान रखें कि एक एंकर सिर्फ एक लिंक नहीं है, यह भी कुछ है जो कोई लिंक कर सकता है। (हालांकि पूर्व उपयोग दूर अधिक उत्तरार्द्ध से आम है।) W3C (पुराने, लेकिन प्रासंगिक) का हवाला देते हुए:

एक एंकर है जो शुरुआत और/या एक हाइपरटेक्स्ट की समाप्ति का सूचक टेक्स्ट का एक हिस्सा संपर्क।

अंत में, एक लिंक के रूप में एंकर को न सोचें। इसे दस्तावेज़ में एक बिंदु के रूप में सोचें जो एक और बिंदु (उसी दस्तावेज़ या किसी अन्य दस्तावेज़ में) से जुड़ता है, इससे कोई फर्क नहीं पड़ता)। गैर-भौतिक धागे से जुड़े कुछ गैर-भौतिक स्थान में दो बिंदु।

यह देखते हुए कि एंकरों में बहुत सारी सामग्री नहीं होनी चाहिए। यदि इसमें बहुत सारी सामग्री है, तो यह "बिंदु" बनने के लिए समाप्त हो जाती है और "क्षेत्र" बनने लगती है। उदाहरण के लिए, एक एंकर की कल्पना करें, जब ब्राउज़र में एक बार प्रदर्शित होने से अधिक स्थान लेता है। अगर उस एंकर से कुछ लिंक है, तो इसे कहाँ जाना चाहिए? शुरुवात? मध्य? समाप्त? (सहजता से आप शुरुआत सोच सकते हैं, लेकिन आपको विचार मिलता है।)

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

+0

मुझे लगता है कि एक क्षेत्र बनाम एक बिंदु के बारे में आपकी व्याख्या सबसे ज्यादा घर बनाती है। मुझे लगता है कि एंकर उन चीजों में से एक है जो सबसे अच्छा अपूर्ण रूप से समझा जाता है। परिप्रेक्ष्य के लिए धन्यवाद। –

+4

बिल्कुल सही स्पष्टीकरण, जो कि कई टैग के इरादे और उनकी समझ/उपयोग के बीच डिस्कनेक्ट को हाइलाइट करता है। दिलचस्प बात यह है कि यह कुछ हद तक एचटीएमएल 5 के रूप में बदल गया है, टैग को अब एक एंकर के रूप में स्पष्ट रूप से हाइपरलिंक के रूप में परिभाषित किया गया है। सामग्री पर "प्रतिबंध" भी उठाया गया था, जिससे टैग आधिकारिक रूप से "ब्लॉक" -लेवल सामग्री (अब "प्रवाह" कहा जाता है) रखने में सक्षम है। [W3.org] (http://dev.w3.org/html5/markup/a.html) – ench

+2

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

1

अस्पष्टता के कारण एंकर घोंसले की सिफारिश नहीं की जाती है (हालांकि सभी ब्राउज़रों ने मुझे परीक्षण पर क्लिक किया है) अस्पष्टता के कारण।

यह कहना तर्कसंगत नहीं है कि एक बड़े हिस्से को एक निश्चित पृष्ठ का नेतृत्व करना चाहिए और इस भाग में एक छोटे से हिस्से को कहीं और ले जाना चाहिए। मुझे अभी भी इस तरह के व्यवहार के लिए कोई उपयोग केस देखना है। उपलब्ध स्क्रिप्टिंग भाषाओं के विकास के साथ, इस तरह की पुनरावृत्ति या विरासत काम कर सकती है (जावास्क्रिप्ट उदाहरण के लिए divs पर घटनाओं पर क्लिक करें), लेकिन कोई कोड किसी निश्चित URL पर और फिर किसी अन्य (पैरेंट एंकर 'href) को निर्देशित नहीं करना चाहता।

संपादित करें: आपके द्वारा संदर्भित प्रश्न को देखते हुए, 2 एंकरों को ढेर करना जो सटीक उसी href पर इंगित करता है पूरी तरह बेकार है। बस घोंसले को हटा दें और सबकुछ अच्छा होगा। यदि ऐसा इसलिए है क्योंकि आपने a a{color:red;} जैसे सीएसएस नियम का उपयोग किया है तो एक अवधि का उपयोग करें! या यहां तक ​​कि display:inline के साथ एक div लेकिन कृपया, कृपया, कृपया एक एंकर कहीं जाना चाहिए, केवल स्टाइलिंग उद्देश्य या कुछ के लिए उपयोग नहीं किया जाना चाहिए।

+0

बाहरी एंकर द्वारा संदर्भित संसाधन के किसी विशेष भाग से आंतरिक एंकर को लिंक करने के बारे में क्या होगा? उदाहरण के लिए, एक # टिप्पणी अनुभाग? –

+0

@DanielJames हालांकि आपको ऐसा करने के लिए कुछ "तर्क" कारण मिल सकते हैं, आपको समझना होगा कि यह अर्थपूर्ण रूप से सही नहीं है और चूंकि मानक ऐसी अनियमितता की योजना नहीं बनाते हैं, इसलिए ब्राउज़र कार्यान्वयन अलग-अलग स्थिति को संभालने के लिए स्वतंत्र हैं जो अप्रत्याशित व्यवहार कर सकता है ... – Salketer

+0

जो पोस्ट किए गए प्रश्न का उत्तर नहीं देता है। सवाल स्पष्ट रूप से * क्यों * WHATG और W3C से HTML spec लिखा गया था के बारे में स्पष्ट रूप से था। कह रहे हैं, "आपको यह समझना है कि मानक इस तरह हैं" और फिर ब्राउज़र व्यवहार के बारे में कुछ अप्रासंगिक कह रहे हैं जब spec का पालन नहीं किया जाता है, वार्तालाप में कुछ भी नहीं जोड़ता है। इसके अलावा, यदि आप मेरा पोस्ट इतिहास देखते हैं, तो आप देखेंगे कि मैंने स्पष्ट रूप से दस्तावेज किया है * बिल्कुल * जब spec का पालन नहीं किया जाता है तो क्या होता है। –

7

spec for <a> की सामग्री मॉडल है:

पारदर्शी है, लेकिन कोई interactive content वंशज होना चाहिए।

तो कल्पना वास्तव में आपके कहने से अधिक जटिल है। यह <button> पर भी लागू होता है - अनिवार्य रूप से आपके पास बटन के अंदर लिंक या बटन के अंदर काम करने वाले लिंक नहीं हो सकते हैं।

दुर्भाग्य से मेरे पास आपके प्रश्न का मजबूत जवाब नहीं है क्यों - मैं केवल अनुमान लगा सकता हूं। एक स्पष्ट कारण यह है कि यह अस्पष्टता है (उदाहरण के लिए जब आंतरिक अंदर क्लिक किया जाता है तो एंकर का पालन किया जाना चाहिए?)

यह न केवल कार्यात्मक अस्पष्टता बनाता है, बल्कि अर्थपूर्ण अस्पष्टता भी बनाता है। <a> की सामग्री इसके हाइपरलिंक के लिए एक लेबल है। तो क्या इसका मतलब यह है कि बाहरी हाइपरलिंक बाहरी लिंक की सामग्री के लिए लेबल का हिस्सा है?

+0

मैं निश्चित रूप से यह तर्क प्राप्त कर सकता हूं। मैं प्रोग्रामर की आवश्यकता को बहुत स्पष्ट होने की आवश्यकता देख सकता हूं कि वे मेरे काम में काम करने के उदाहरण की तरह कुछ कैसे चाहते हैं। –

+1

ऐसा नहीं है कि अस्पष्टता एक अनजान समस्या है, हालांकि। कुछ सम्मेलनों और शायद कुछ एचटीएमएल गुणों के नियंत्रण के साथ आना कितना मुश्किल है? –

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