由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 ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
Dec 10 Javascript
js判断设备是否为PC并调整图片大小
Feb 12 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
JavaScript中的对象与JSON
Jul 03 Javascript
jQuery中的siblings()是什么意思(推荐)
Dec 29 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
详解用vue.js和laravel实现微信授权登陆
Jun 23 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
js constructor的实际作用分析
2011/11/15 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python编写登陆接口的方法
2017/07/10 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
我的求职计划书
2014/01/10 职场文书
优秀员工获奖感言
2014/03/01 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
婚庆答谢词大全
2015/09/29 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
MySQL 条件查询的常用操作
2022/04/28 MySQL