由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获取触发事件元素在整个网页中的绝对坐标(示例代码)
Dec 13 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
Mar 08 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
JS中substring与substr的用法
Nov 16 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
微信小程序 利用css实现遮罩效果实例详解
Jan 21 Javascript
Angular开发者指南之入门介绍
Mar 05 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
Apr 26 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 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实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
详解Python中for循环的使用
2015/04/14 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
小学中等生评语
2014/12/29 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
数据库连接池
2021/04/06 MySQL
SQL SERVER中的流程控制语句
2022/05/25 SQL Server