JavaScript在XHTML中的用法详解


Posted in Javascript onApril 11, 2013

编写XHTML代码的规则要比编写HTML要严格得多,类似下面的代码在HTML中是有效的,但在XHTML中则是无效的。
[javascript]

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

在HTML中,有特殊的规则用以确定<script>元素中的哪些内容可以被解析,但这些规则在XHTML中不适用。因为小于号(<)在XHTML中将被当作开始一个新标签来解析。但是作为标签,小于号后面不能跟空格,因此导致语法错误。
解决方法有两个:一、用相应的HTML实体(<)替换代码中所有的小于号(<);二、使用一个CData片段来包含JavaScript代码。
方法一相应代码:
[javascript]
<script type="text/javascript"> 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
</script> 
<script type="text/javascript"> 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
</script>

方法二相应代码:
[javascript]
<script type="text/javascript"><![CDATA[ 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
]]></script> 
<script type="text/javascript"><![CDATA[ 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
]]></script>

方法一虽然可以让代码在XHTML中正常运行,但却导致代码不好理解了;而方法二在兼容XHTML的浏览器中可以解决问题。但不少浏览器并不兼容XHTML,因而不支持CData片段。所以再使用JavaScript注释将CData标记注释掉。
相应代码:
[html]
<script type="text/javascript"> 
//<![CDATA[ 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
//]]> 
</script> 
<script type="text/javascript"> 
//<![CDATA[ 
function compare(a, b) 
{ 
if(a < b) 
{ 
alert("a is less then b"); 
} 
else if(a > b) 
{ 
alert("a is greater then b"); 
} 
else 
{ 
alert("a is equal to b"); 
} 
} 
//]]> 
</script>

这种格式在所有现代浏览器中都可以正常使用。
附:不推荐使用的语法
[javascript]
<script><!-- 
function sayHi(){ 
alert("Hi!); 
} 
//--></script> 
<script><!-- 
function sayHi(){ 
alert("Hi!); 
} 
//--></script>

像上面这样把JavaScript代码包含在一个HTML注释中可以让不支持<script>元素的浏览器隐藏嵌入的JavaScript代码,即忽略<script>标签中的内容,而那些支持JavaScript的浏览器在遇到这种情况时,则必须进一步确认其中是否包含需要解析的JavaScript代码。

虽然这种注释格式得到了所有浏览器的认可,也能被正确的解释,但由于所有浏览器都已经支持JavaScript,因此也就没有必要再使用这种格式了。

Javascript 相关文章推荐
分享几个超级震憾的图片特效
Jan 08 Javascript
JQuery解析HTML、JSON和XML实例详解
Mar 29 Javascript
script标签属性用type还是language
Jan 21 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
树结构之JavaScript
Jan 24 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
js评分组件使用详解
Jun 06 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
JavaScript中的noscript元素属性位置及作用介绍
Apr 11 #Javascript
javascript标签在页面中的位置探讨
Apr 11 #Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
Apr 11 #Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 #Javascript
在javascript中对于DOM的加强
Apr 11 #Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 #Javascript
在javascript中关于节点内容加强
Apr 11 #Javascript
You might like
PHP中的float类型使用说明
2010/07/27 PHP
PHP 第一节 php简介
2012/04/28 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
PHP7变量处理机制修改
2021/03/09 PHP
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
Js自定义多选框效果的实例代码
2017/07/05 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
Python利用递归实现文件的复制方法
2018/10/27 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
德国高性价比网上药店:medpex
2017/07/09 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
公证委托书模板
2014/04/03 职场文书
中学生英语演讲稿
2014/04/26 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python