由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中数组的sort()方法的使用介绍
Dec 18 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
Jun 24 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
Jan 06 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
vue基于element的区间选择组件
Sep 07 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
JS异步宏队列微队列原理详解
Sep 09 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
javascript Number 与 Math对象的介绍
Nov 17 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读取msn上的用户信息类
2008/12/05 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
使用python实现扫描端口示例
2014/03/29 Python
python中Flask框架简单入门实例
2015/03/21 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
django之常用命令详解
2016/06/30 Python
Python文件和流(实例讲解)
2017/09/12 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
离婚代理词范文
2015/05/23 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
导游带团欢迎词
2015/09/30 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python中22个万用公式的小结
2021/07/21 Python