zoukankan      html  css  js  c++  java
  • (原)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 文档。
  • 相关阅读:
    day12 Python操作rabbitmq及pymsql
    day11 队列、线程、进程、协程及Python使用缓存(redis/memcache)
    day10 Python作用域 Python2.7与Python3.x的类继承的区别、异步IO、多进程,多线程简介
    day09 Python socket编程
    day08 面向对象补充及单例模式
    day07 configparser xml subprocess 面向对象
    day06 Python的一些内建变量、反射、hashlib模块、re模块、os模块、sys模块
    day05 Python多层装饰器、模块、序列化、字符串格式化、生成器和迭代器、递归、time、datetime模块、logging模块
    day04 Python一些内置函数及装饰器
    查看旧版jexus命令
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/9123201.html
Copyright © 2011-2022 走看看