由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 退出系统并跳转到登录界面的实现代码
Jun 29 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
jquery移动节点实例
Jan 14 Javascript
Javascript中With语句用法实例
May 14 Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
react国际化化插件react-i18n-auto使用详解
Mar 31 Javascript
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
vue3不同环境下实现配置代理
May 25 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
前端必学之PHP语法基础
2016/01/01 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP简单日历实现方法
2016/07/20 PHP
ie focus bug 解决方法
2009/09/03 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
asm.js使用示例代码
2013/11/28 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
python实现合并两个排序的链表
2019/03/03 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
浅谈Python3中print函数的换行
2020/08/05 Python
python 批量将中文名转换为拼音
2021/02/07 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
英国航空官网:British Airways
2016/09/11 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
当当网软件测试笔试题
2015/11/24 面试题
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
环保公益广告语
2014/03/13 职场文书
2015年大学生工作总结
2015/04/21 职场文书
大学生入党群众意见书
2015/06/02 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书