由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 相关文章推荐
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
vue Render中slots的使用的实例代码
Jul 19 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
gulp构建小程序的方法步骤
May 31 Javascript
原生js代码能实现call和bind吗
Jul 31 Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 Javascript
解决Vue大括号字符换行踩的坑
Nov 09 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中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
php中strtotime函数性能分析
2016/11/20 PHP
ExtJS 入门
2010/10/29 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python实现两个文件夹的同步
2019/08/29 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
毕业生自荐书
2014/02/03 职场文书
网络宣传方案
2014/03/15 职场文书
民事和解协议书格式
2014/11/29 职场文书
CAD实训总结范文
2015/08/03 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
详解Python中下划线的5种含义
2021/07/15 Python