由document.body和document.documentElement想到的


Posted in Javascript onApril 13, 2009

对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途。其实这个对于我们开发兼容性的web页面还是很有帮助,我们都知道,盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在不声明Doctype的情况下,浏览器默认是Quirks Mode。所以为兼容性考虑,我们可能需要获取当前的文档渲染方式。
document.compatMode正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat,对其解释如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
当文档有了标准声明时, document.compatMode 的值就等于 "CSS1compat", 因此, 我们可以根据 document.compatMode 的值来判断文档是否加了标准声明
var height = document.compatMode=="CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight;
当文档有了标准声明时火狐的style.top等等的设置必须加上“px”等单位,否则它不会认。既然已经说道了这,再展开一下。对于火狐:
一、offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。
二、offsetTop 只读,而 style.top 可读写。
三、如果没有给 HTML 元素指定过 top 样式(即使在css中设定也不行),则 style.top 返回的是空字符串。
offsetLeft 与 style.left、offsetWidth 与 style.width、offsetHeight 与 style.height 也是同样道理。
再说说他们的区别吧:
下面这段大家可能都见到过,在网上被转载过很多次,在这我也借用一下:
.Kfk428 { display:none; }
网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;
由document.body和document.documentElement想到的
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标

event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

以上主要指IE之中,FireFox差异如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

在设置了文档类型后也可能有差异,以上仅供参考

Javascript 相关文章推荐
javascript解决innerText浏览器兼容问题思路代码
May 17 Javascript
jquery text(),val(),html()方法区别总结
Nov 04 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
JavaScript动态修改背景颜色的方法
Apr 16 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
如何检测JavaScript中的死循环示例详解
Aug 30 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
Apr 13 #Javascript
javascript removeChild 使用注意事项
Apr 11 #Javascript
Firefox window.close()的使用注意事项
Apr 11 #Javascript
javascript html 静态页面传参数
Apr 10 #Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
Apr 10 #Javascript
javascript 原型模式实现OOP的再研究
Apr 09 #Javascript
javascript 鼠标滚轮事件
Apr 09 #Javascript
You might like
PHP 文件类型判断代码
2009/03/13 PHP
php适配器模式介绍
2012/08/14 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
js实现数组转换成json
2015/06/26 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python 使用get_argument获取url query参数
2017/04/28 Python
详解python:time模块用法
2019/03/25 Python
python getpass实现密文实例详解
2019/09/24 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
就职演讲稿范文
2014/05/19 职场文书
2014年车间工作总结
2014/11/21 职场文书
会议开幕词
2015/01/28 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python