网上对offsetParent和parentNode差异的解释都是同一篇文章千篇一律,讲的不是很清楚。

offsetParent用的最普遍的就是来计算元素在页面中的位置,前面的日志理讲了 通过getBoundingClientRect() 来获取页面中元素的位置,不过这只支持最新的浏览器,如果要兼容像Opera9.2和Firefox2以及Safair任何版本都只能通过offsetParent该属性来循环获计算获得元素的位置,效率不太好。贴一段缩减了来自YUI里的代码:

Codefunction getElementXY(el){ //el 要获取位置的元素对象var pos = [el.offsetLeft, el.offsetTop]; //首先获得该元素相对第一个非流布局父元素的位置var parentNode = el.offsetParent; //获得该元素的第一个非流布局父元素if (parentNode != el) { while (parentNode) {             pos[0] += parentNode.offsetLeft;             pos[1] += parentNode.offsetTop;            parentNode = parentNode.offsetParent; //循环定义非流布局父元素        }    }}

MSDN解释offsetParent在大多时候返回的是Body,其实是返回第一个非流布局的父级元素, 也就是postion的值是 absolute,relative,fixed,(inherit 继承父元素也是前三者)其中之一,当然如果父级元素都是流布局最后返回的肯定是Body,由此可见offsetParent本身在获取的时候要通过页面不 断查找父元素,尤其在代码多层嵌套的时候,需要向上查找未知的层次,直到获取到第一个非流布局元素。

offsetLeft和offsetTop分别返回相对offsetParent的位置,也就是返回相对第一个非流布局父级元素的位置。

上面的代码可以看出这个方法是通过不断循环获得相对非流布局父元素的位置相加来最后计算得到要获取的位置。

IE7对offsetParent解释有个BUG,貌似始终返回父元素。

parentNode就不用解释了,父节点。

转载于:https://www.cnblogs.com/tiwlin/archive/2010/12/15/1906950.html

offsetParent相关推荐

  1. 深入理解定位父级offsetParent及偏移大小

    偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.offsetTop.offsetHeight.offsetWidth这四个 ...

  2. JS OffsetParent属性深入解析

    offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果这个容器元素未进行CSS定位, ...

  3. jQuery——parent(),parents(),offsetParent(),closets()方法

    .parent() 作用:选中指定元素的直接父元素 [例]点击按钮,改变其父元素的背景颜色,效果如下 代码 <html lang="en"> <head>& ...

  4. [JavaScript][转]offsetParent和parentElement的区别

    作者:未知 来源于:网络转载 发布时间:2006-9-30 23:42:32 一直以为offsetParent和parentElement是一回事,最近在做web控件才发现原来的理解是大错特错.   ...

  5. javascript好文---深入理解定位父级offsetParent及偏移大小

    前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.offsetTop.offsetHeight.offsetWid ...

  6. parentNode,parentElement,offsetParent

    offsetParent直接的将是影响元素位置的上级element,而parentElement与位置显示无关时dom中的上级element. 例如:<BODY><div style ...

  7. DOM之parentNode与offsetParent

    DOM中有两个属性parentNode和offsetParent,想必区别大家都是知道的,可用法上还是有一些需要注意的地方,尤其是后者,想知道吗?继续往下看咯. parentNode指的是父节点,el ...

  8. offsetParent和parentElement的区别

    parentElement 在msdn的解释是Retrieves the parent object in the object hierarchy. 而offsetParent在msdn的解释是Re ...

  9. 获取元素到body顶部的距离,offsetTop和offsetParent,getBoundingClientRect

    最近在写一个可见曝光的sdk,是当元素显示在可见区域的时候才算作曝光,并上报给服务端.思路是在元素请求回来并渲染完成之后,计算元素距离document顶部的距离offset,当页面滚动的时候,计算of ...

最新文章

  1. 未来人工智能客户服务的5大优势
  2. oracle sql命令行中上下左右使用
  3. java pdfbox 解析报错_pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary...
  4. Linux shell编程:状态变量
  5. linux之vifm和ranger操作文件管理器使用总结
  6. python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...
  7. linux 环境变量导出,关于Linux:如何删除导出的环境变量?
  8. ajax回调给全局变量,jquery.Ajax回调成功后数据赋值给全局变量的问题
  9. Java前后端分离第三方登录_网站前后端分离情况下如何实现QQ微信等第三方登陆-Fun言...
  10. Django官方中文文档
  11. Windows的CMD的NET命令net start , net stop ...
  12. 兽药销售终端如何摆脱客情困局
  13. 十三经结业:《诗经》之《蒹葭》赏析
  14. 物种多样性学习 之Alpha多样性
  15. 浅层砂过滤器的原理是什么,滤料是什么,需要不需要定期?
  16. windows7远程桌面
  17. APC计算机大赛,2019全国职业院校技能大赛计算机网络应用赛项题库C卷 2c.docx
  18. 有趣的23000----整理(05)E、F词根
  19. 2023上海国际天然食用胶产业展览会暨发展大会
  20. 基于 Java 的答题卡识别系统

热门文章

  1. Vue-router之路由参数传递
  2. Tcpdump命令学习
  3. 使用镜像数据库减轻报表的负载
  4. IIS搭配Server-u构建企业空间服务(二)
  5. 1、基于Feign的接口调用概述
  6. 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
  7. 2018清华计算机类专业录取分数线,清华大学2018-2019年各省各专业录取分数线
  8. mysql索引与事务笔记_《MySQL技术内幕:InnoDB存储引擎》读书笔记五-锁、索引及事务...
  9. Spring-aop-简单示例
  10. linux系统oracle监听启动,linux下启动与关闭oracle监听与实例