2012-10-24 19 views
46

के अंदर एंकर टैग बनाना मेरे यादृच्छिक परीक्षण के दौरान मैंने एक व्यवहार देखा जहां मैंने एक अन्य एंकर टैग के अंदर एक एंकर टैग लगाया। मैंने jsfiddle बनाया।एंकर टैग

<a class="groupPopper"> 
    <a class="name"> content</a> 
</a>​ 

लेकिन डेवलपर उपकरण में यह अलग दिखाई देता है:

enter image description here

मेरा मानना ​​है कि हम आंतरिक लंगर इच्छा बबल सामने क्लिक करें घटना के लिए पर क्लिक करने के रूप में एक और लंगर टैग के अंदर एक लंगर टैग नहीं डाल सकते अभिभावक एंकर टैग जिसे अनुमति नहीं दी जानी चाहिए।

क्या मेरी धारणा सही है?

उत्तर

71

जैसा कि @ j08691 वर्णन करता है, नेस्टेड a तत्व HTML वाक्यविन्यास में प्रतिबंधित हैं। एचटीएमएल विनिर्देशों का कहना नहीं है क्यों; वे सिर्फ नियम पर जोर देते हैं।

व्यावहारिक पक्ष पर, ब्राउज़र प्रभावी रूप से इस प्रतिबंध को अपने पार्सिंग नियमों में लागू करते हैं, इसलिए कई अन्य मुद्दों के विपरीत, चश्मे का उल्लंघन करने से बस काम नहीं करेगा। पार्सर्स एक खुले a तत्व के अंदर प्रभावी टैग को प्रभावी ढंग से इलाज करते हैं क्योंकि एक नया शुरू करने से पहले खुले तत्व को स्पष्ट रूप से समाप्त कर दिया जाता है।

तो यदि आप <a href=foo>foo <a href=bar>bar</a> zap</a> लिखते हैं, तो आपको घोंसला वाले तत्व नहीं मिलेंगे। ब्राउज़र इसे <a href=foo>foo</a> <a href=bar>bar</a> zap के रूप में पार्स करेंगे, यानी कुछ सादे पाठ के बाद लगातार दो लिंक के रूप में।

नेस्टेड a तत्वों के साथ स्वाभाविक रूप से अजीब कुछ भी नहीं है: उन्हें लागू किया जा सकता है ताकि "foo" या "zap" पर क्लिक करने से बाहरी लिंक सक्रिय हो जाए, "बार" पर क्लिक करने से आंतरिक लिंक सक्रिय हो जाता है। लेकिन मुझे ऐसी संरचना का उपयोग करने का कोई कारण नहीं दिख रहा है, और एचटीएमएल के डिजाइनरों ने शायद एक को नहीं देखा है, इसलिए उन्होंने इसे मना करने और इस तरह चीजों को सरल बनाने का फैसला किया। ।

(तुम सच में नेस्टेड लिंक अनुकरण करने के लिए चाहते हैं तो आपके भीतर की "लिंक" के रूप में एक उपयुक्त ईवेंट हैंडलर के साथ बाहरी कड़ी के रूप में एक सामान्य लिंक और एक span तत्व इस्तेमाल कर सकते हैं या फिर, आप लिंक नकल कर सकते हैं: <a href=foo>foo</a> <a href=bar>bar</a> <a href=foo>zap</a>।)

3

यह अवैध HTML है।

आप a तत्वों को घोंसला नहीं दे सकते।

तो, परिभाषा के अनुसार, व्यवहार अपरिभाषित है।

+0

इसके पीछे क्या कारण हो सकता है? बस और स्पष्टीकरण चाहते हैं। – Anoop

+0

@ सुशील - मुझे यह जवाब दें - नेस्टेड 'ए' तत्व का अर्थ क्या होगा? इसका क्या अर्थ हो सकता है? – Oded

+0

हां, यह कोई समझ नहीं आता है लेकिन यह मेरे लिए नई बात थी इसलिए यह सुनिश्चित करना चाहता था कि मैं स्पैन, img .. एंकर टैग के अंदर टैग डाल सकता हूं। – Anoop

15

Nested links are illegal.

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

+0

इसके पीछे क्या कारण हो सकता है? बस और स्पष्टीकरण चाहते हैं। – Anoop

+1

मुझे इसके पीछे सटीक तर्क नहीं पता है, हालांकि मैं कम से कम अर्थपूर्ण रूप से कहूंगा कि यह घोंसले के लिंक का कोई मतलब नहीं है। उल्लेख नहीं किया गया है कि 'href' मानों के साथ वास्तविक लिंक होने के कारण पूरी तरह से व्यर्थ लगता है। – j08691

+0

यह मेरी धारणा भी है। बस और अधिक सुनिश्चित करना चाहता था। क्योंकि मैं एक टैग के अंदर अन्य टैग (उदाहरण के लिए अवधि) डाल सकता हूं। – Anoop

-3

यह कोडिंग के एक बुरा तरीका है, लेकिन आप इस कोशिश कर सकते हैं -

< a href = > aaaa < तालिका > < टीआर > < टीडी > < a href = > bbbb </> </टीडी > </tr > </तालिका > </>

+4

साथ ही 1 99 6 से ब्राउज़र हैक की तरह दिखने पर, यह काम नहीं करेगा। कम से कम फ़ायरफ़ॉक्स में, जब यह अंदरूनी एंकर की शुरुआत पाता है तो यह बाहरी एंकर को बंद करके इसका अर्थ समझने का प्रयास करेगा। इसमें टीडी, टीडी, और टेबल तत्वों को बंद करना भी शामिल होगा, और फिर आंतरिक एंकर बंद होने के बाद उन्हें फिर से खोलना होगा। मैंने WooCommerce टेम्पलेट में यह सटीक व्यवहार देखा है, कुछ सुंदर फंकी और गैर-स्पष्ट स्वरूपण समस्याओं का सामना कर रहा है, जिसने मुझे उत्तर खोजने का प्रयास करने के लिए इस SO प्रश्न का नेतृत्व किया। – Jason

0

ऐसा मत करो। मुझे अपने ऐप में एक ही समस्या का सामना करना पड़ रहा था। आप बच्चे स्तर पर शीर्ष पर <div> टैग और <a> टैग जोड़ सकते हैं। कुछ की तरह:

<div id="myDiv"><a href="#"></a> 
    <a href="#"></a> 
</div> 

यकीन है कि आप अपने स्क्रिप्ट फ़ाइल में myDiv के लिए क्लिक करें घटना जोड़ें।

window.location.href = "#dashboardDetails";

3

मैं इस मुद्दे पर ठोकर खाई जब भी बटन द्वारा एक div पैनल क्लिक करने योग्य बनाने की कोशिश कर। कामकाज जो मैं अनुशंसा करता हूं वह जावास्क्रिप्ट घटनाओं का उपयोग करना है।

यहाँ एक codepen उदाहरण मैं बनाया है .... http://codepen.io/thinkbonobo/pen/gPxJGV

यहाँ यह के HTML भाग है:

लिंक में एम्बेडेड लिंक का उदाहरण ....

<div class=panel onclick="alert('We\'ll hi-ii-ii-ide')"> 
    If you say run<br> 
    <button onclick="app.hitMe(event)">more</button><br> 
    <br> 
    And if you say hide...<br> 
</div> 

सूचना आंतरिक लिंक के लिए घटना कैप्चर की जाती है और स्टॉपप्रॉपेशन() का उपयोग कैसे किया जाता है। यह सुनिश्चित करना महत्वपूर्ण है कि बाहरी ट्रिगर नहीं चल रहा है।

+1

मुझे event.preventDefault() का उपयोग करना पड़ा; क्रोम पर –

+0

यह समस्या है कि एमबीबी-क्लिक एक नए टैब में लिंक नहीं खोलता है। –

0

आप 'ए' टैग घोंसला नहीं कर सकते हैं। इसके बजाय बाहरी कंटेनर को 'स्थिति: रिश्तेदार' और दूसरा 'ए' के ​​रूप में 'स्थिति: पूर्ण' के रूप में सेट करें और इसके जेड-इंडेक्स मान को बढ़ाएं। आप एक ही प्रभाव प्राप्त करेंगे।

<div style="position:relative"> 
<a href="page2.php"><img src="image-1.png"></a> 
<a style="position:absolute;top:0;z-index:99" href="page1.php"></a> 
</div> 
-1

आप इस समस्या को हल करने के लिए ऑब्जेक्ट टैग का उपयोग कर सकते हैं। जैसे

<a><object><a></a></object></a> 
+1

क्या? यह सबसे खराब "समाधान" कभी भी –

+0

है ?? क्यों? क्या तुम मुझे बता सकते हो .... – user9147812

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