JS OffsetParent属性深入解析


Posted in Javascript onJanuary 13, 2014

offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素(在标准兼容模式下为html元素;在怪异呈现模式下为body元素)的引用。 当容器元素的style.display 被设置为 "none"时(译注:IE和Opera除外),offsetParent属性 返回 null。

句法:
parentObj = element.offsetParent

变量:
· parentObj 是一个元素的引用,当前元素的偏移量在其中计算。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript" language="JavaScript">
  function offset_init() {
  var pElement = document.getElementById("sonObj");
  parentObj = pElement.offsetParent;
  alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<div id="parent">
<p id="sonObj">测试OffsetParent属性</p>
</div>
</body>
</html>

测试结果:
Firefox3:"BODY"
Internet Explorer 7:"BODY"
Opera 9.51:"BODY"
Chrome 0.2:"BODY"
Safari 3:"BODY

结论:
当某个元素及其DOM结构层次中元素都未进行CSS定位时(absolute或者relative)[或者某个元素进行CSS定位时而DOM结构层次中元素都未进行CSS定位时],则这个元素的offsetParent属性的取值为根元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为Body元素。(其实无论时标准兼容模式还是怪异模式,根元素都为Body元素)

测试代码2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style type="text/css">
#parent {
    position: absolute; <!-- position:relative; -->
    left: 25px;
    top: 188px;
    border: 1px solid black;
}
</style>
<script type="text/javascript" language="JavaScript">
    function offset_init() {
var pElement = document.getElementById("sonObj");
parentObj = pElement.offsetParent;
alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<div id="parent">div测试代码
<p id="sonObj">测试OffsetParent属性</p>
</div>
</body>
</html>

测试结果:
Firefox3:"DIV"
Internet Explorer 7:"DIV"
Opera 9.51:"DIV"
Chrome 0.2:"DIV"
Safari 3:"DIV"

结论:
当某个元素的父元素进行了CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为其父元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为其父元素

测试代码3

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style type="text/css">
#Grandfather {
    position: relative;
    left: 25px;
    top: 188px;
    border: 1px solid black;
}
</style>
<script type="text/javascript" language="JavaScript">
function offset_init() {
var pElement = document.getElementById("sonObj");
parentObj = pElement.offsetParent;
alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<h1 id="Grandfather">
<div id="parent">
<p id="sonObj">测试OffsetParent属性</p>
</div>
</h1>
</body>
</html>

测试结果:
Firefox3:"H1"
Internet Explorer 7:"H1"
Opera 9.51:"H1"
Chrome 0.2:"H1"
Safari 3:"H1"

结论:
当某个元素及其父元素都未进行CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为在DOM结构层次中距离其最近,并且已进行了CSS定位的元素。

Javascript 相关文章推荐
jQuery中的常用事件总结
Dec 27 Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
javascript入门之string对象【新手必看】
Nov 22 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
基于jquery日历价格、库存等设置插件
Jul 05 jQuery
ECMAscript 变量作用域总结概括
Aug 18 Javascript
Vue中使用clipboard实现复制功能
Sep 05 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
JavaScript网页定位详解
Jan 13 #Javascript
js菜单点击显示或隐藏效果的简单实例
Jan 13 #Javascript
ie8本地图片上传预览示例代码
Jan 12 #Javascript
js 立即调用的函数表达式如何写
Jan 12 #Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 #Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
Jan 12 #Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 #Javascript
You might like
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php计算整个目录大小的方法
2015/06/01 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python实现linux下抓包并存库功能
2018/07/18 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python socket模块方法实现详解
2019/11/05 Python
Python求解正态分布置信区间教程
2019/11/20 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
中国电视购物:快乐购
2017/02/04 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
个人找工作的自我评价
2013/10/17 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书