2010-11-19 14 views
14
<script type="text/javascript"> 
    function test() { 
     alert('&lt;span&gt;blah&lt;span&gt;'); 
    } 
</script> 
<a href="#" onclick="test();">First</a><br /> 
<a href="#" onclick="alert('&lt;span&gt;blah&lt;span&gt;');">Second</a><br /> 
Third: &lt;span&gt;blah&lt;span&gt; 

डेमो: http://jsfiddle.net/LPYTZ/स्क्रिप्ट टैग के अंदर HTML इकाइयां परिवर्तित नहीं हुईं?

क्यों पहला परिणाम अलग है? <script> टैग किसी भी तरह से इकाई रूपांतरण से बाहर रखा गया है?

उत्तर

21

एचटीएमएल, स्क्रिप्ट और स्टाइल तत्वों में defined in the DTD as containing CDATA हैं। इसका मतलब यह है कि जब तक पार्सर किसी अंत टैग की तरह दिखता है तब तक इकाइयों और टैगों को अनदेखा कर दिया जाता है।

XHTML is different और उन तत्वों के अंदर इकाइयों और टैग सामान्य के रूप में कार्य करते हैं - लेकिन केवल जब एक्सएचटीएमएल के रूप में पार्स किया जाता है। आप <![CDATA[ … ]]> के साथ सामग्री को सीडीएटीए के रूप में स्पष्ट रूप से चिह्नित कर सकते हैं।

ब्राउजर एचटीएमएल नियमों का उपयोग करते हुए एक्सएचटीएमएल को पाठ/एचटीएमएल के रूप में काम करेंगे, जो कि नियमों के दोनों सेटों के तहत सही कोड लिखने की कोशिश करते समय खराब की एक बड़ी गेंद की ओर जाता है।

समस्याओं से बचने का सबसे आसान तरीका बाहरी फ़ाइलों में स्क्रिप्ट रखना है और उन्हें शामिल करने के लिए src विशेषता का उपयोग करना है।

+0

+1 एक्सएचटीएमएल का उल्लेख करने के लिए भी। – Gumbo

+0

जैसा कि मैंने पहले से ही * एक्सएचटीएमएल (jsfiddle में भी) +1 के लिए +1 किया था "ब्राउज़र एचटीएमएल का इलाज एचटीएमएल नियमों का उपयोग कर पाठ/एचटीएमएल के रूप में कार्य करेगा" भाग के लिए। – AndreKR

+0

@AndreKR: यह MIME मीडिया प्रकार है जो महत्वपूर्ण नहीं है, सामग्री नहीं। – Gumbo

10

हाँ, content model of STYLE and SCRIPT खास है:

हालांकि STYLE और SCRIPT तत्वों को उनके डाटा मॉडल के लिए CDATA उपयोग करते हैं, इन तत्वों के लिए, CDATA अलग ढंग से उपयोगकर्ता एजेंटों द्वारा नियंत्रित किया जाना चाहिए। मार्कअप और इकाइयों को कच्चे पाठ के रूप में माना जाना चाहिए और आवेदन के रूप में पास किया जाना चाहिए। चरित्र अनुक्रम "</" (एंड-टैग ओपन डेलीमीटर) की पहली घटना तत्व की सामग्री के अंत को समाप्त करने के रूप में माना जाता है। वैध दस्तावेजों में, यह तत्व के लिए अंत टैग होगा।

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