JavaScript 笔记 - 在XHTML中的用法
2016-03-24 10:56
435 查看
JavaScript 笔记 - 在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>
在 HTML 中,有特殊的规则用以确定< script>元素中的哪些内容可以被解析,但这些特殊的规则在 XHTML 中不适用。这里比较语句 a < b 中的小于号(<)在 XHTML 中将被当作开始一个新标签来 解析。但是作为标签来讲,小于号后面不能跟空格,因此就会导致语法错误。
避免在 XHTML 中出现类似语法错误的方法有两个。一是用相应的 HTML 实体(< ;)替换代码中所有的小于号(<),替换后的代码类似如下所示:
<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>
虽然这样可以让代码在 XHTML 中正常运行,但却导致代码不好理解了。为此,我们可以考虑采用另一个方法。 保证让相同代码在 XHTML 中正常运行的第二个方法,就是用一个 CData 片段来包含 JavaScript 代 码。在 XHTML(XML)中, CData 片段是文档中的一个特殊区域,这个区域中可以包含不需要解析的 任意格式的文本内容。因此,在 CData 片段中就可以使用任意字符——小于号当然也没有问题,而且不会导致语法错误。引入 CData 片段后的 JavaScript 代码块如下所示:
<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 的浏览器中,这个方法可以解决问题。但实际上,还有不少浏览器不兼容 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>
这种格式在所有现代浏览器中都可以正常使用。虽然有几分 hack 的味道,但它能通过 XHTML 验证,而且对 XHTML 之前的浏览器也会平稳退化。
在将页面的 MIME 类型指定为”application/xhtml+xml”的情况下会触发XHTML 模式。并不是所有浏览器都支持以这种方式提供 XHTML 文档。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享