由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 function、指针及内置对象
Feb 19 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
Mar 21 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
May 15 Javascript
纯JS实现只能输入数字的简单代码
Jun 21 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
如何基于jQuery实现五角星评分
Sep 02 jQuery
JS实现纸牌发牌动画
Jan 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
模仿OSO的论坛(五)
2006/10/09 PHP
php伪静态之APACHE篇
2014/06/02 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP异常处理浅析
2015/05/12 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
vue小白入门教程
2018/04/02 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
Python实现控制台进度条功能
2016/01/04 Python
python中 logging的使用详解
2017/10/25 Python
Python random模块用法解析及简单示例
2017/12/18 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
毕业生自荐书
2014/02/03 职场文书
职位说明书范文
2014/05/07 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS