!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 相关文章推荐
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
Aug 31 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 Javascript
详解如何制作并发布一个vue的组件的npm包
Nov 10 Javascript
JS自定义滚动条效果
Mar 13 Javascript
JavaScript常用工具函数大全
May 06 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python打包成so文件过程解析
2019/09/28 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
Python自动创建Excel并获取内容
2020/09/16 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
《夏夜多美》教学反思
2014/02/17 职场文书
英文推荐信格式范文
2014/05/09 职场文书
四风问题对照检查材料
2014/09/22 职场文书
2015年调度员工作总结
2015/04/30 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
基于angular实现树形二级表格
2021/10/16 Javascript
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL