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 相关文章推荐
Array对象方法参考
Oct 03 Javascript
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 Javascript
javascript加载xml 并解析各节点的值(实现方法)
Oct 12 Javascript
面试常见的js算法题
Mar 23 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue+spring boot实现校验码功能
May 27 Vue.js
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实现框架(二)
2006/10/09 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python安装教程
2018/02/28 Python
python 字符串追加实例
2019/07/20 Python
python内打印变量之%和f的实例
2020/02/19 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
长江三峡导游词
2015/01/31 职场文书
治庸问责工作总结
2015/08/11 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android