谈谈XHTML中CDATA
发布时间:2007-09-17 12:45:00
近来,随着XHTML(可扩展HTML)标准的出现,<script/>标签也经历了一些改变。该标签不再用language特性,而用type特性声明内嵌代码或要加入的外部文件的mime类型,JavaScript的mime类型是"text/javascript"。例如:
Example Source Code
<html>
<head>
<title>Title of Page</title>
<script type=”text/javascript”>
var i = 0;
</script>
<script type=”text/javascript” src=”../scripts/external.js”></script>
</head>
<body>
<!-- body goes here -->
</body>
</html>
即使许多浏览器不完全支持XHTML,但大多数开发者现在都用type特性,而不用language特性,以提供更好的XHTML支持。省略language特性不会带来任何问题,因为如前所述,所有浏览器都默认<script/>的该属性值为JavaScript。
XHTML的第二个改变是使用CDATA段。XML中的CDATA段用于声明不应被解析为标签的文本(XHTML也是如此),这样就可以使用特殊字符,如小于(<)、大于(>)、和号(&)和双引号("),而不必使用它们的字符实体。考虑下面的代码:
Example Source Code
<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中,这段代码是无效的,因为它使用了三个特殊符号,即小于、大于和双引号。要修正这个问题,必须分别用这三个字符的XML实体<、>和"替换它们:
Example Source Code
<SCRIPT type=”text/javascript”>
function compare(a, b) {
if (a < b) {
alert("A is less than B");
} else if (a > b) {
131
JavaScript in the Browser
alert("A is greater than B");
} else {
alert("A is equal to B");
}
}
</SCRIPT>
这段代码存在两个问题。首先,开发者不习惯用XML实体编写代码。这使代码很难读懂。其次,在JavaScript中,这种代码实际上将视为有语法错,因为解释程序不知道XML实体的意思。用CDATA段即可以以常规形式(即易读的语法)编写JavaScript代码。正式加入CDATA段的方法如下:
Example Source Code
<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,这就带来主要问题,即这在JavaScript中是个语法错误,因为大多数浏览器还不认识CDATA段。
当前使用的解决方案模仿了“对旧浏览器隐藏”代码的方法。使用单行的JavaScript注释,可在不影响代码语法的情况下嵌入CDATA段:
Example Source Code
<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>
猜你喜欢
- 本文介绍了Python实现曲线点抽稀算法的示例,分享给大家,具体如下:目录何为抽稀道格拉斯-普克(Douglas-Peuker)算法垂距限值
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 下面示例代码是防止用网页刷新过快,如果多个页面使用,最好将<%...%>代码存为一个asp文件,在需要的页面最前面include
- 说明本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python实现的,
- @property作用:python的@property是python的一种装饰器,是用来修饰方法的。我们可以使用@property装饰器来
- 引用起初我会下意识的回答,直接 v == nil 进行判断不就好了吗?然后翻阅了很多资料终于大致搞定里面的道道.例子请看下面这段代码,可以先
- 看youa的源码发现的,原来flash可以有fallback content:<object type="applicati
- 有时需要根据项目的实际需求向spider传递参数以控制spider的行为,比如说,根据用户提交的url来控制spider爬取的网站。在这种情
- 相关推荐:完整的sql中文参考手册(chm)下载 DB2 提供了关连式资料库的查询语言 sql (Structured Query
- 笔者日积月累了许多精彩、实用的Web特效的制作,这些特效几乎都是比较常用的网页特效。现在我就把这些经过
- 本文实例为大家分享了python实现两张图片拼接为一张图片并保存的具体代码,供大家参考,具体内容如下这里主要用Python扩展库pillow
- 获取当前工作目录import sysprint(sys.path[0])获取执行命令的位置import osprint(os.getcwd(
- 本文实例讲述了python列表操作之extend和append的区别。分享给大家供大家参考。具体如下:li = ['a',
- 1.创建空字典>>> dic = {}>>> type(dic)<type 'dict
- 这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑。前两个方法是
- 一、前言前几天在Python最强王者群有个叫【dcpeng】的粉丝问了一个关于Pandas中的问题,这里拿出来给大家分享下,一起学习。想问一
- 在我之前写的几篇网站优化的文章中,着墨最多的是减少HTTP请求。通过减少请求数目,你的浏览器必须能对你的网站所有内容成功检索,总的HTTP请
- scipy.interpolate插值方法1 一维插值from scipy.interpolate import interp1d1维插值算
- Lists Snippets我们先从最常用的数据结构列表开始1.将两个列表合并成一个字典假设我们在 Python 中有两个列表,我们希望将它
- 什么是闭包?简单说,闭包就是根据不同的配置信息得到不同的结果。再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Clos