js parentElement和offsetParent之间的区别

 更新时间:2010年03月23日 23:15:56   作者:  
这里主要说的是 offsetParent 属性,这个属性在 MSDN 的文档中也没有解释清楚,这就让人更难理解这个属性。 这几天在网上找了些资料看看,再加上自己的一些测试,对此属性有了那么一点的了解,在这里总结一下。
首先是 parentElement 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A。
这里主要说的是 offsetParent 属性,这个属性在 MSDN 的文档中也没有解释清楚,这就让人更难理解这个属性。 这几天在网上找了些资料看看,再加上自己的一些测试,对此属性有了那么一点的了解,在这里总结一下。
要明白 offsetParent 属性,要先明白“已定位元素” 这个名字,所谓“已定位元素”就是指给元素设置了 position 属性的样式,并且 position 样式属性的值等于 absolute、relative、fixed 之一的元素。
在使用 offsetParent 属性获取父级对象时有以下两种情况:
    1、元素本身已经定位
        如果元素本身已经定位,那么 offsetParent 属性返回此元素已定位父级元素,如没有已定位的父级元素,则返回 BODY 对象,例如:
复制代码 代码如下:

<body>
<p>
<div>
<span id="obj1" style="position:absolute"></span>
</div>
<div id="pObj1" style="position:absolute">
<span id="obj2" style="position:absolute"></span>
</div>
</p>
</body>

    obj1.offsetParent 返回 BODY 对象
    obj2.offsetParent 返回 pObj1 对象
    2、元素没有定位
        如果元素没有定位, offsetParent 不但会找已经定位的父级元素而且还会查找类型为 TD 和 TABLE 的父级元素,只要找到这三种父级元素的其中任何一种元素将返回此元素,否则返回 BODY 对象,例如:
复制代码 代码如下:

<table width="500" border="0">
<tr>
<td id="td1">
<div id="pObj1">
<span id="obj1"></span>
</div>
</td>
</tr>
<tr>
<td>
<div id="pObj2" style="position:relative">
<span id="obj2"></span>
</div>
</td>
</tr>
</table>

    obj1.offsetParent 返回 td1 对象
    obj2.offsetParent 返回 pObj2 对象
在 DOM 元素的属性里,还有 parentNode 这个属性,其实这个属性跟 parentElement 属性是一个意思,parentElement 属性是 IE 特有的,W3C 标准是使用 parentNode 属性,还有 children 和 childNodes, children 是 IE 特有的, childNodes 被其他浏览支持。

相关文章

  • js文件Cookie存取值示例代码

    js文件Cookie存取值示例代码

    这篇文章主要介绍了js文件Cookie存取值的使用,需要的朋友可以参考下
    2014-02-02
  • document.cookie 使用小结

    document.cookie 使用小结

    这篇文章主要介绍了document.cookie 使用,主要包括cookie设置,修改cookie值及获取cookie值的相关知识,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • JavaScript登录验证码的实现

    JavaScript登录验证码的实现

    验证码功能真的无处不在,为了提高网站的安全性,验证码功能是必要的环节,今天小编通过本文给大家分享js登录验证码的实现,感兴趣的朋友跟着小编一起学习吧
    2016-10-10
  • 判断滚动条滑到底部触发事件(实例讲解)

    判断滚动条滑到底部触发事件(实例讲解)

    下面小编就为大家带来一篇判断滚动条滑到底部触发事件的实例讲解。具有很好的参考价值。一起跟随小编过来看看吧,希望对大家有所帮助
    2017-11-11
  • 微信小程序中网络请求缓存的解决方法

    微信小程序中网络请求缓存的解决方法

    这篇文章主要给大家介绍了关于微信小程序中网络请求缓存的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 使用原生JS实现拍照功能

    使用原生JS实现拍照功能

    今天我们聊一聊,一个非常有趣且重要的问题,如何用原生js实现拍照功能?这时候,有的朋友会说,为什么要用原生js实现呀,这么麻烦还要自己动脑子,直接用第三方库多好呀,但是,你难道不好奇它的底层js实现吗?感兴趣的同学跟着小编一起来瞧瞧吧
    2023-12-12
  • js实现简单放大镜特效

    js实现简单放大镜特效

    这篇文章主要为大家详细介绍了js实现简单放大镜特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • JavaScript实现获取URL中参数值的4种方法

    JavaScript实现获取URL中参数值的4种方法

    这篇文章主要为大家详细介绍了如何使用JavaScript实现获取URL中参数值的4种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2025-02-02
  • Bootstrap 模态框实例插件案例分析

    Bootstrap 模态框实例插件案例分析

    Bootstrap Modals(模态框)是使用定制的 Jquery 插件创建的。它可以用来创建模态窗口丰富用户体验,或者为用户添加实用功能。下面通过本文给大家介绍如何使用bootstrap插件来实现模态框
    2016-12-12
  • 移动端如何用下拉刷新的方式实现上拉加载

    移动端如何用下拉刷新的方式实现上拉加载

    这篇文章主要介绍了移动端如何用下拉刷新的方式实现上拉加载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论