2010-11-19 4 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

В HTML, элементы сценария и стиля - defined in the DTD as containing CDATA. Это означает, что сущности и теги игнорируются до тех пор, пока парсер не ударит по тому, что выглядит как конечный тег.

XHTML is different и объекты и теги внутри этих элементов функционируют как обычно, но только при анализе XHTML. Вы можете явно помечать контент как CDATA с помощью <![CDATA[ … ]]>.

Браузеры будут обрабатывать XHTML, который будет использоваться как текст/html, используя правила HTML, что приводит к большому шару отвратительности, когда вы пытаетесь написать код, который является правильным в соответствии с обоими наборами правил.

Самый простой способ избежать проблем - сохранить скрипты во внешних файлах и использовать атрибут src для их включения.

+0

+1 Для упоминания XHTML также. – Gumbo

+0

Как я уже * имел * XHTML (в jsfiddle тоже) +1 для «Браузеры будут обрабатывать XHTML, который будет использоваться как текст/html с использованием правил HTML». – AndreKR

+0

@AndreKR: Это важный тип мультимедиа MIME, а не контент. – Gumbo

10

Да, content model of STYLE and SCRIPT особенный:

Хотя STYLE и SCRIPT элементов используют CDATA для своей модели данных, для этих элементов, CDATA должна обрабатываться по-разному пользовательскими агентами. Разметка и объекты должны рассматриваться как необработанные и передаваться в приложение как есть. Первое вхождение символьной последовательности «</» (разделитель конца конечного тега) рассматривается как завершение конца содержимого элемента. В действительных документах это будет конечным тегом для элемента.

Смежные вопросы