!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 相关文章推荐
dojo 之基础篇
Mar 24 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 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
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python内置函数dir详解
2015/04/14 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
基于Django用户认证系统详解
2018/02/21 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
大学生饮食配送创业计划书
2014/01/04 职场文书
民族团结先进个人材料
2014/02/05 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python