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 相关文章推荐
JS获取IUSR_机器名和IWAM_机器名帐号的密码
Dec 06 Javascript
javascript编程起步(第七课)
Feb 27 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
JS实现控制表格内指定单元格内容对齐的方法
Mar 30 Javascript
探讨JavaScript语句的执行过程
Jan 28 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
JS实现全屏的四种写法
Dec 30 Javascript
基于js中style.width与offsetWidth的区别(详解)
Nov 12 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
Nov 14 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
PHP产生随机字符串函数
2006/12/06 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
Python温度转换实例分析
2018/01/17 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
神路信息Java面试题目
2013/03/31 面试题
服务员岗位责任制
2014/02/11 职场文书
计算机专业职业规划
2014/02/28 职场文书
酒店开业策划方案
2014/06/02 职场文书
护士求职简历自我评价
2015/03/10 职场文书
推普标语口号大全
2015/12/26 职场文书