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 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
Apr 19 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
JS+CSS3实现超炫的散列画廊特效
Jul 16 Javascript
Node.js 日志处理模块log4js
Aug 28 Javascript
Vue基于NUXT的SSR详解
Oct 24 Javascript
浅谈vue-router 路由传参的方法
Dec 27 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
javascript实现计算器功能
Mar 30 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通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
利用python发送和接收邮件
2016/09/27 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
专科毕业生自我鉴定
2013/12/01 职场文书
学校就业推荐信范文
2014/05/19 职场文书
法律系毕业生求职信
2014/05/28 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python