!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 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
jQuery 表格插件整理
Apr 27 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
jQuery simpleModal插件的使用介绍
Aug 30 Javascript
微信小程序 教程之模块化
Oct 17 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
vue 自定义 select内置组件
Apr 10 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
微信小程序事件流原理解析
Nov 27 Javascript
JS前端使用canvas实现物体的点选示例
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版
2006/10/09 PHP
如何判断php数组的维度
2013/06/10 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
为什么称python为胶水语言
2020/06/16 Python
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
优秀求职信范文分享
2013/12/19 职场文书
写自荐信要注意什么
2013/12/26 职场文书
劳资协议书范本
2014/04/23 职场文书
环保建议书400字
2014/05/14 职场文书
关于保护环境的标语
2014/06/09 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电