`
流浪鱼
  • 浏览: 1692442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js parentElement和offsetParent之间的区别

阅读更多

这里主要说的是 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 被其他浏览支持。
详细出处参考:http://www.jb51.net/article/22705.htm

分享到:
评论

相关推荐

    clientHeight,offsetHeight,scrollHeight,offsetParent和parentElement,offsetLeft.

    clientHeight,offsetHeight,scrollHeight,offsetParent和parentElement,offsetLeft.

    用css样式固定表头和列

    left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #E6ECF0; } ``` ### 实现细节 - **使用`expression`**: 虽然在现代前端开发中,直接使用`expression`并不被...

    仿excel、锁定表头和表列-3种方法

    1、js通过样式的方法、了解parentElement和offsetParent的原理,自己的布局不一样,css也就不一样,这种方法是浏览器可能会比较慢的哦!! 2、2\3方法都是用jquery也有仿excel的方法,自己也可以去网上找一找

    Js Div属性大全

    JavaScript中的Div元素是网页布局和动态交互的重要组成部分。在JavaScript中,我们可以通过各种属性来控制和操作Div元素,实现丰富的动态效果。以下是一些主要的Div属性及其详细说明: 1. accessKey:设置或获取...

    html固定表格头和列

    例如,在上面的代码中,`top: expression(this.offsetParent.scrollTop)`和`left: expression(this.parentElement.offsetParent.scrollLeft)`就是利用`expression`表达式动态计算并设置元素的`top`和`left`值,确保...

    JS中offset和匀速动画详解

    在JavaScript中,`offset`属性是用来获取或设置元素相对于其offsetParent元素的位置和尺寸的。offset家族包括`offsetWidth`、`offsetHeight`、`offsetLeft`和`offsetTop`,以及`offsetParent`,它们提供了对元素尺寸...

    JavaScript Table行定位效果

    上面用到了parentNode,这里顺便说说它跟offsetParent,parentElement的区别。 先看看parentNode在w3c的说明: The parent of this node. All nodes, except Document, DocumentFragment, and Attr may have a ...

    JS 添加删除行

    本文将基于给定的脚本代码来详细介绍如何使用JavaScript(简称JS)实现动态添加、删除行以及对齐剩下的元素下标等功能。 #### 二、关键函数解析 ##### 1. `get_Element` 函数 该函数用于获取指定标签名的DOM元素...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...

    固定表格行列(expression)在IE下适用

    这里使用`left: expression(this.parentElement.offsetParent.parentElement.scrollLeft)`来使列与父元素的滚动条左边对齐。同样,`background-color`定义了背景颜色。 3. `.FixedColumnAndRows` 类结合了前两者的...

    JS获取子节点、父节点和兄弟节点的方法实例总结

    在JavaScript中,对DOM元素的操作是网页开发过程中非常常见且重要的部分。本文主要针对获取子节点、父节点和兄弟节点的方法进行了详尽的实例总结,并在操作过程中需要注意的技巧与事项进行了分析。 首先,获取子...

    Html页面的dom常见属性

    它为HTML和XML文档提供了一种树状结构,并允许JavaScript或其他脚本语言进行交互,从而实现动态地控制页面元素。 #### DOM节点基本属性 在DOM中,每个节点都具有一些基本属性,这些属性可以帮助开发者更好地理解与...

    javascript 移动鼠标得到单元格所在table表中的rowIndex位置[兼容ie,firefox] 原创

    总之,实现JavaScript中兼容IE和Firefox的单元格行索引获取,关键在于正确处理`event.target`和`event.srcElement`,以及在不同浏览器中获取父元素的策略。通过以上的方法,你可以编写出能够兼容多种浏览器的代码,...

    ie与firefox下的event使用说明与详细区别

    最后,在操作DOM树时,IE使用`parentElement`和`parentElement.children`来获取父节点和子节点集合,删除节点用`element.removeNode(true)`;Firefox则使用`parentNode`和`parentNode.childNodes`,删除节点用`node....

    比较全面的event对像在IE与FF中的区别 推荐

    本文主要探讨了在Internet Explorer(IE)和Firefox浏览器中事件对象`event`的区别。 首先,IE浏览器有一个全局的`window.event`对象,可以用来访问当前事件的信息。然而,Firefox并不支持这个全局变量。在Firefox...

    vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果

    在Vue.js中,实现一个编辑器功能,当用户在输入时,如果键盘抬起,内容能够自动跟随光标距离顶部的位置向上滚动,这是一个提高用户体验的重要设计。这种效果常见于各种输入密集型的应用,如文本编辑器、笔记应用或...

    CSS_style属性大全

    - **说明**: 每个元素都可以有一个唯一的ID,用于通过CSS或JavaScript来选择和操作这个元素。 **22. innerText** - **功能**: 设置或获取位于对象起始和结束标签内的文本。 - **语法**: `innerText: [text]` - ...

Global site tag (gtag.js) - Google Analytics