由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 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
javascript写的异步加载js文件函数(支持数组传参)
Jun 07 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
Vue 全局loading组件实例详解
May 29 Javascript
Webpack的dll功能使用
Jun 28 Javascript
原生JS实现的轮播图功能详解
Aug 06 Javascript
vue封装swiper代码实例解析
Oct 08 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 Javascript
解决antd的Form组件setFieldsValue的警告问题
Oct 29 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初学者最感迷茫的问题小结
2010/03/27 PHP
php字符串截取的简单方法
2013/07/04 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
loading动画特效小结
2017/01/22 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
Python标准异常和异常处理详解
2015/02/02 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Python3实现购物车功能
2018/04/18 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
师范应届毕业生自荐信
2013/11/18 职场文书
金秋助学感谢信
2015/01/21 职场文书
七年级作文之英语老师
2019/10/28 职场文书
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL
python读取mat文件生成h5文件的实现
2022/07/15 Python