!DOCTYPE声明对JavaScript的影响分析


Posted in Javascript onApril 12, 2010

要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效;当然对JS的取值也会有影响。

DOCTYPE声明如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

DOCTYPE声明包括:过渡型(Transitional),严格型(Strict)和框架型(Frameset)。接下来就看一下这三种类型对不同浏览器在获取元素相关信息时的影响(包括不定义DOCTYPE和只将DOCTYPE定义为<!docType>形式),我测试的浏览器分别为:IE6.0、IE7.0、IE8.0(变态模式)、FF、Opera、Chrome和Safari。由于IE5.5已经几乎被淘汰,所以不在测试范围之内。

以下就是测试结果(滚动条只是元素本身的滚动条并不是窗口的):

一、过渡型(Transitional)

1、测试IE6.0、IE7.0与IE8.0(非变态模式Quirks)的宽度和高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘width']
有无滚动条均为:offsetWidth=paddingLeft+paddingRight+borderLeft+borderRightoffsetHeight=paddingTop+paddingBottom+borderTop+boderBottom 1、无滚动条clientWidth=CSS中定义的宽度+paddingLeft+paddingRightclientHeight=CSS中定义的高度+paddingTop+paddingBottom(均不包括边框宽度)2、有滚动条clientWidth=CSS中定义的宽度-滚动条宽度(17固定值)-边框宽度,clientHeight=CSS中定义的高度-滚动条宽度(17固定值)-边框宽度 实际真实宽度,不包括padding与边框值(除IE和Opera以外无此属性)
offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']
有无滚动条均为:offsetLeft=对象的offsetLeft-边框offsetTop=实际值 有无滚动条均为:边框的宽度 除IE和Opera以外无此属性

2、测试IE8.0变态模式(Quirks)的宽度与高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘height]
1、(无滚动条)宽度(高度)=当前对象的实际数值2、(有滚动条)宽度(高度)=CSS中定义的数值 1、(无滚动条)宽度(高度)=当前对象的实际数值2、(有滚动条)宽度(高度)=当前对象在CSS中定义的数值-滚动条(17) 有无滚动条均为:宽度和高度均为CSS中定义的数值
offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']
有无滚动条均为: offsetLeft(offsetTop)=实际值 有无滚动条均为:边框的宽度 除IE和Opera以外无此属性

3、FF、Opera、Safari和Chrom中所取得的数值与第一种情况一样。

二、严格型(Strict)

1、测试IE6.0、IE7.0与IE8.0(非变态模式Quirks)的宽度和高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘width']
有无滚动条均为:offsetWidth=paddingLeft+paddingRight+borderLeft+borderRightoffsetHeight=paddingTop+paddingBottom+borderTop+boderBottom 1、无滚动条clientWidth=CSS中定义的宽度+paddingLeft+paddingRightclientHeight=CSS中定义的高度+paddingTop+paddingBottom均不包括边框宽度2、有滚动条clientWidth=CSS中定义的宽度-滚动条宽度(17固定值)-边框宽度,clientHeight=CSS中定义的高度-滚动条宽度(17固定值)-边框宽度 实际真实宽度,不包括padding与边框值(除IE和Opera以外无此属性)
offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']
有无滚动条均为:offsetLeft=对象的offsetLeft-边框offsetTop=实际值 有无滚动条均为:边框的宽度 除IE和Opera以外无此属性

2、测试IE8.0变态模式(Quirks)的宽度与高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘height]
1、(无滚动条)宽度(高度)=当前对象的实际数值2、(有滚动条)宽度(高度)=CSS中定义的数值 1、(无滚动条)宽度(高度)=当前对象的实际数值2、(有滚动条)宽度(高度)=当前对象在CSS中定义的数值-滚动条(17)-边框宽度 有无滚动条均为:宽度和高度均为CSS中定义的数值(除IE和Opera以外无此属性)
offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']
有无滚动条均为: offsetLeft(offsetTop)=实际值 有无滚动条均为:边框的宽度 除IE和Opera以外无此属性

3、FF、Opera、Safari和Chrom中所取得的数值与第一种情况一样。

三、取消DOCTYPE声明

1、IE6.0、IE7.0在没有DOCTYPE声明时与IE8.0中的变态模式(Quirks)中严格型结果相同。

2、FF、Safari、Chrome和IE8.0标准模式是与过渡型结果相同。

3、Opera浏览器中,在元素没有滚动条时offsetHeight与clientHeight的取值是在其当前现实的大小。

四、将DOCTYPE声明改写为<!docType>

1、IE6.0、IE7.0在没有DOCTYPE声明时与IE8.0中的变态模式(Quirks)中严格型结果相同。

2、FF、Safari、Chrome和IE8.0标准模式是与过渡型结果相同。

3、Opera浏览器中,在元素没有滚动条时offsetHeight与clientHeight的取值是在其当前现实的大小。

在Opera中也拥有与IE一样的属性“currentStyle”,所以在Opera中也可以使用currentStyle来取得元素的精确值。

Javascript 相关文章推荐
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
Nov 23 Javascript
基于JQuery的asp.net树实现代码
Nov 30 Javascript
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 Javascript
php+js实现倒计时功能
Jun 02 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 Javascript
swiper实现导航滚动效果
Dec 13 Javascript
最新最全的手机号验证正则表达式
Feb 24 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
Apr 12 #Javascript
javascript cookies 设置、读取、删除实例代码
Apr 12 #Javascript
javascript cookies操作集合
Apr 12 #Javascript
javascript 数组学习资料收集
Apr 11 #Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
Apr 11 #Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 #Javascript
javascript dom 基本操作小结
Apr 11 #Javascript
You might like
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
php自定义session示例分享
2014/04/22 PHP
PHP单例模式详细介绍
2015/07/01 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python常用内置函数总结
2015/02/08 Python
python使用Matplotlib画饼图
2018/09/25 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Python单元测试与测试用例简析
2019/11/09 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
娱乐地球:Entertainment Earth
2020/01/08 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
人力资源部经理的岗位职责
2014/03/04 职场文书
秸秆管理实施方案
2014/03/15 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
党支部意见范文
2015/06/02 职场文书
2019暑假学生安全口号
2019/06/27 职场文书