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 相关文章推荐
动态表格Table类的实现
Aug 26 Javascript
jquery 之 $().hover(func1, funct2)使用方法
Jun 14 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
Jun 15 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
微信小程序实现横向增长表格的方法
Jul 24 Javascript
详解Vue中使用插槽(slot)、聚类插槽
Apr 12 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
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截取中文字符串不乱码的方法
2013/12/25 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
PHP实现微信提现功能
2018/09/30 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
js对象的复制继承实例
2015/01/10 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
js传递数组参数到后台controller的方法
2018/03/29 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python制作简单的网页爬虫
2015/11/22 Python
python实现手机通讯录搜索功能
2018/02/22 Python
详解django自定义中间件处理
2018/11/21 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
秋天的雨教学反思
2014/04/27 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
单方投资意向书
2015/05/11 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
mysql函数全面总结
2021/11/11 MySQL