!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 相关文章推荐
前后台交互过程中json格式如何解析以及如何生成
Dec 26 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
Sep 06 Javascript
jQuery控制网页打印指定区域的方法
Apr 07 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
Javascript单例模式的介绍和实例
Oct 08 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
Jun 14 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
实例解析ES6 Proxy使用场景介绍
Jan 08 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 09 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
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python递归计算N!的方法
2015/05/05 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python连接数据库的方法
2017/10/19 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
如何在python中实现线性回归
2020/08/10 Python
校班主任推荐信范文
2013/12/03 职场文书
淘宝好评语大全
2014/05/05 职场文书
调研汇报材料范文
2014/08/17 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
centos7安装mysql5.7经验记录
2022/05/02 Servers
python实现学员管理系统(面向对象版)
2022/06/05 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android