(原)JavaScript高级程序设计(第3版)--学习笔记--02: 在HTML中使用JavaScritp--0005--在XHTML中的用法

2.1.4 在XHTML中的用法

可扩展超文本标记语言,即 XHTML(Extensible HyperText Markup Language),是将 HTML 作为 XML 的应用而重新定义的一个标准。

编写 XHTML 代码的规则要比编写 HTML 严格得多,而且直接影响能否在嵌入 JavaScript 代码时使用 <script> 标签。

以下面代码为例,虽然他们在 HTML 中是有效的,但在 XHTML 中则是无效的。

<script type="text/javascript">
    function compare(a, b) {
        if (a < b) {
            alert("A is less than B");
        } else if (a > b) {
            alert("A is greater than B");
        } else {
            alert("A is equal to B");
        }
    }
</script>

这里比较语句 a < b 中的小于号(<)在 XHTML 中将被当作开始一个新标签来解析。但是作为标签来讲,小于号后面不能跟空格,因此会导致语法错误。

避免类似错误的方法有:两个。

方法一:用相应的 HTML 实体(&lt;)替换代码中所有的小于号(<),替换后的代码类型如下所示:

<script type="text/javascript">
    function compare(a, b) {
        if (a &lt; b) {
            alert("A is less than B");
        } else if (a > b) {
            alert("A is greater than B");
        } else {
            alert("A is equal to B");
        }
    }
</script>

虽然这样可以在 XHTML 中正常运行,但会导致代码不好理解。所以采用第二种方法。

方法二:用一个 CData 片段来包含 JavaScript 代码。 在 XHTML(XML)中,CData 片段是文档中的一个特殊区域,这个区域中可以包含不需要解析的任意格式的文本内容。因此,在 CData 片段中可以使用任意字符串,不会导致语法错误。

如下:

<script type="text/javascript"><![CDATA[
    function compare(a, b) {
        if (a < b) {
            alert("A is less than B");
        } else if (a > b) {
            alert("A is greater than B");
        } else {
            alert("A is equal to B");
        }
    }
]]></script>

这个方法可以解决问题。

实际上,有不少浏览器不兼容 XHTML,因而不支持 CData 片段。

所以,使用 JavaScript 注释将 CData 标记注释掉,就可以。如下:

<script type="text/javascript">
//<![CDATA[
    function compare(a, b) {
        if (a < b) {
            alert("A is less than B");
        } else if (a > b) {
            alert("A is greater than B");
        } else {
            alert("A is equal to B");
        }
    }
//]]>
</script>

这种格式在所有现代浏览器中都可以正常使用。

node:在将页面的 MIME 类型指定为"application/xhtml+xml"的情况下会触发 XHTML 模式。并不是所有浏览器都支持以这种方式提供 XHTML 文档。
原文地址:https://www.cnblogs.com/wodehao0808/p/9123201.html