由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 each()源代码
Feb 14 Javascript
Jquery操作js数组及对象示例代码
May 11 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
js简单实现调整网页字体大小的方法
Jul 23 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
Feb 24 Javascript
基于vue.js实现分页查询功能
Dec 29 Javascript
详解滑动穿透(锁body)终极探索
Apr 16 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
vue实现二级导航栏效果
Oct 19 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 8小时时间差的解决方法小结
2009/12/22 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
django celery redis使用具体实践
2019/04/08 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
一份报关员的职业规划范文
2014/01/08 职场文书
工商企业管理专业自荐信范文
2014/04/12 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
个人道歉信大全
2019/04/11 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
Java中的随机数Random
2022/03/17 Java/Android
springboot实现string转json json里面带数组
2022/06/16 Java/Android
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS