!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 自动安装exe程序
Nov 30 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
Sep 04 Javascript
3分钟掌握常用的JS操作JSON方法总结
Apr 25 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 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
PHP版自动生成文章摘要
2008/07/23 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
Python魔术方法详解
2015/02/14 Python
bpython 功能强大的Python shell
2016/02/16 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
浅谈Python 对象内存占用
2016/07/15 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
python之列表推导式的用法
2019/11/29 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
四风存在的原因分析
2014/02/11 职场文书
《称象》教学反思
2014/04/25 职场文书
推广普通话标语
2014/06/27 职场文书
实习单位鉴定意见
2015/06/04 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers