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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
Prototype ObjectRange对象学习
Jul 19 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
js使用for循环查询数组中是否存在某个值
Aug 12 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
Bootstrap开发实战之第一次接触Bootstrap
Jun 02 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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实现批量修改文件名称的方法
2016/07/23 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
简单介绍Python中的JSON使用
2015/04/28 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python global全局变量函数详解
2018/09/18 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python hmac模块使用实例解析
2019/12/24 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python 多进程、多线程效率对比
2020/11/19 Python
应用心理学个人的求职信
2013/12/08 职场文书
好的演讲稿开场白
2013/12/30 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
出售房屋委托书范本
2014/09/24 职场文书
幼儿教师辞职信
2015/02/27 职场文书
会计稽核岗位职责
2015/04/13 职场文书
郭明义观后感
2015/06/08 职场文书
委托收款证明
2015/06/23 职场文书
新教师教学工作总结
2015/08/12 职场文书
python - timeit 时间模块
2021/04/06 Python
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫