由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 相关文章推荐
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
Oct 17 Javascript
javascript之AJAX框架使用说明
Apr 24 Javascript
在JavaScript中获取请求的URL参数[正则]
Dec 25 Javascript
用javascript添加控件自定义属性解析
Nov 25 Javascript
javascript实现列表滚动的方法
Jul 30 Javascript
Vue生命周期示例详解
Apr 12 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
Vue2.0设置全局样式(less/sass和css)
Nov 18 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 Javascript
vue递归实现树形组件
Jul 15 Vue.js
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
Terran历史背景
2020/03/14 星际争霸
PHP缓存技术的使用说明
2011/08/06 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Python-基础-入门 简介
2014/08/09 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
anaconda如何查看并管理python环境
2019/07/05 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
初二物理教学反思
2014/01/29 职场文书
音乐教学反思
2014/02/02 职场文书
经销商订货会主持词
2014/03/27 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
道歉信范文
2015/05/12 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书