<script type="text/javascript">
function test() {
alert('<span>blah<span>');
}
</script>
<a href="#" onclick="test();">First</a><br />
<a href="#" onclick="alert('<span>blah<span>');">Second</a><br />
Third: <span>blah<span>
为什么第一个结果不同? <script>
标记是否以某种方式从实体转换中排除?
答案 0 :(得分:23)
在HTML中,脚本和样式元素为defined in the DTD as containing CDATA。这意味着在解析器遇到类似于结束标记的内容之前,将忽略实体和标记。
XHTML is different这些元素中的实体和标签正常运行 - 但仅在解析为XHTML时才起作用。您可以使用<![CDATA[ … ]]>
将内容明确标记为CDATA。
浏览器将使用HTML规则将XHTML视为text / html,当您尝试编写在两组规则下都正确的代码时,这会导致一个令人讨厌的大球。
避免出现问题的最简单方法是将脚本保存在外部文件中,并使用src
属性将其包含在内。
答案 1 :(得分:11)
是的,content model of STYLE
and SCRIPT
很特别:
虽然
STYLE
和SCRIPT
元素使用CDATA作为其数据模型,但对于这些元素,CDATA必须由用户代理以不同方式处理。必须将标记和实体视为原始文本并按原样传递给应用程序。第一次出现的字符序列“</
”(结束标记打开定界符)被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。