क्या कुछ HTML टैग घोंसले पर कोई सीमा है?

मैं यह पूछ रहा हूं क्योंकि आज मैं अजीब समस्या में भाग गया। एक स्पष्ट रूप से मान्य HTML दस्तावेज़ ठीक से प्रस्तुत करने में विफल रहता है।

The markup contains lots of deeply nested tags. Here's an example.

ऐसा लगता है कि ~ 10 स्तरों के बाद, ब्राउज़र अंत में टैग को कहीं भी ले जाते हैं। एचटीएमएल सत्यापनकर्ता रिपोर्ट करता है:

<पी> रेखा 82, कॉलम 24: एंड टैग बी घोंसले के नियमों का उल्लंघन करता है।

फिर मुझे भटकने वाले टैग के बारे में कुछ त्रुटियां मिलती हैं, जो पहली त्रुटि करते हैं तो समझ में आता है। लेकिन मेरे लिए यह नहीं है। सही ढंग से घोंसला होने पर यह घोंसले के नियम क्या उल्लंघन करते हैं?

0
वैसे यह एक डीबग ऐप के लिए है जो बहुत सारी जानकारी डंप करने वाला है, कभी-कभी दस्तावेज़ 100 एमबी तक पहुंच सकता है, इसलिए मैंने सबसे छोटे टैगों में से एक चुना ...
जोड़ा लेखक nice ass, स्रोत
मैंने एक खोज की और b span के लिए प्रतिस्थापित किया, और वह मान्य करता है, इसलिए मुझे लगता है कि पर एक सीमा है
जोड़ा लेखक nice ass, स्रोत
हां - आपने डब्ल्यू 3 सी वैधता की सीमा को मारा है। मेरे उत्तर में पूरा विवरण।
जोड़ा लेखक Fenton, स्रोत
जहां तक ​​मुझे पता है कि आपको कभी भी टैग घोंसला नहीं करना चाहिए, हमेशा अगली शुरू करने से पहले एक को समाप्त करना चाहिए। आपको लगता है कि यह घोंसला टैग के लिए मान्य क्यों है क्योंकि यह को
जोड़ा लेखक DrCord, स्रोत
यह कुछ पागल गड़बड़ मार्कअप है, लेकिन मैं समझता हूं कि spec घोंसले को रोकने के लिए प्रतीत नहीं होता है टैग यह मुझे केवल उस हद तक अकेले रहने के लिए पागल लग रहा है।
जोड़ा लेखक DrCord, स्रोत
मुझे लगता है कि आप एक div (या अवधि) चुनने के लिए बेहतर सेवा करेंगे, यह 3x (या 4x) लंबा है लेकिन यह अधिक लचीला है और अधिक समझ में आता है ... मार्कअप आपको दस्तावेज़ की सामग्री के बारे में कुछ बताना चाहता है ...
जोड़ा लेखक DrCord, स्रोत

2 उत्तर

Having deeply nested tags in itself shouldn't be a problem (except perhaps semantically The b element should be used as a last resort when no other element is more appropriate (See W3C B Element)) - for example, this demo shows quite deep nesting and it validates fine.

...(24 levels deep)


    Deep nesting


... (24 levels deep)

हालांकि, शायद कुछ सीमा है - लेकिन अनुमान लगाए जाने से कहीं अधिक है।

यदि मैं डब्लू 3 सी वैधता पर आपके दस्तावेज़ को मान्य करता हूं, तो यह लाइन 90 पर समापन टैग के बारे में शिकायत करता है। अगर मैं इस टैग की सामग्री को हटाता हूं (गलत मिलान के लिए परीक्षण) तो यह ठीक है।

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

यदि मैं दोनों को एक साथ वापस रखता हूं, तो सत्यापनकर्ता विफल रहता है, जो बताता है कि डब्ल्यू 3 सी वैधकर्ता की सीमा है।

And as an interesting final discovery - if you switch it all to elements (for example) it validates just fine - as per this conversion.

0
जोड़ा
यह सिर्फ वैधता नहीं है, सभी ब्राउज़रों भी असफल हो जाते हैं। यदि ब्राउज़र सही ढंग से प्रस्तुत करेगा तो मुझे w3c सत्यापन की परवाह नहीं होगी :)
जोड़ा लेखक nice ass, स्रोत
हां, स्पैन ब्राउज़र के साथ भी काम करते हैं। तो मेरे पास एक अलग टैग का उपयोग करने के अलावा कोई विकल्प नहीं है। मैं उत्सुक हूं हालांकि अन्य टैग पर इन घोंसले की सीमाएं क्या हैं
जोड़ा लेखक nice ass, स्रोत
उम्मीद है कि अवधि समाधान भी वहां काम करेगा - अगर वैधकर्ता इसे पास करता है, तो ब्राउज़र को इसे रॉक करना चाहिए।
जोड़ा लेखक Fenton, स्रोत
मुझे उस पर कोई दस्तावेज नहीं मिल रहा है - एचटीएमएल 5 में b तत्व को "phrasing content" के रूप में वर्गीकृत किया गया है, बस span जैसा ही है।
जोड़ा लेखक Fenton, स्रोत

The answer is here in the HTML5 spec: http://www.w3.org/TR/2014/REC-html5-20141028/syntax.html#push-onto-the-list-of-active-formatting-elements

इसे कहते हैं:

If there are already three elements in the list of active formatting elements after the last list marker, if any, or anywhere in the list if there are no list markers, that have the same tag name, namespace, and attributes as element, then remove the earliest such element from the list of active formatting elements. For these purposes, the attributes must be compared as they were when the elements were created by the parser; two elements have the same attributes if all their parsed attributes can be paired such that the two attributes in each pair have identical names, namespaces, and values (the order of the attributes does not matter).

So: if you have more than three nested "active formatting elements" (such as , , etc.), the browser will remove them from a list that it uses during parsing, and all sorts of strange things can happen.

0
जोड़ा