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 相关文章推荐
javascript中的作用域scope介绍
Dec 28 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
javascript实现标签切换代码示例
May 22 Javascript
jquery获取复选框的值的简单实例
May 26 Javascript
用AngularJS来实现监察表单按钮的禁用效果
Nov 02 Javascript
强大的 Angular 表单验证功能详细介绍
May 23 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
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
PHP中路径问题的解决方案
2006/10/09 PHP
网站当前的在线人数
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/12/05 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
pycharm快捷键汇总
2020/02/14 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
学习委员自我鉴定
2014/01/13 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
文案策划岗位职责
2015/02/11 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
安全生产协议书
2016/03/22 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers