`

offsetParent和parentElement的区别 【给我发表点意见】

阅读更多
一直以为offsetParent和parentElement是一回事,最近在做web控件才发现原来的理解是大错特错。

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

而offsetParent在msdn的解释是Retrieves a reference to the container object that defines the offsetTop and offsetLeft properties of the object. 这个解释有些模糊。我们再来看看他的remarks

Most of the time the offsetParent property returns the body object.

大多说offsetParent返回body


Note  In Microsoft® Internet Explorer 5, the offsetParent property returns the TABLE object for the TD object; in Microsoft® Internet Explorer 4.0 it returns the TR object. You can use the parentElement property to retrieve the immediate container of the table cell.
 
对于IE 5.0以上,TD的offsetParent返回Table。

但是msdn并没有讨论在页面td元素中存在绝对/相对定位时offsetParent的值。

以下是我个人总结的规律

在td中的元素会把第一个绝对/相对定位的hierarchy parent当作offsetParent,如果没有找到需要分三种情况讨论

  一,如果该元素没有绝对/相对定位,则会把td当作offsetParent

  二,如果该元素绝对/相对定位并且table没有绝对/相对定位,则会把body当作offsetParent

  三,如果该元素绝对/相对定位并且table绝对/相对定位,则会把table当作offsetParent

看一下示例代码

1.<BODY >
<TABLE BORDER=1 ALIGN=right>
   <TR>
     <TD ID=oCell><div id="parentdiv" style="position:relative" >parentdiv<div id="sondiv">sondiv</div></div></TD>
   </TR>
</TABLE>


运行结果parentdiv.offsetParent.tagName IS "body"

                 sondiv.offsetParent.id     IS "parentdiv"

2.<BODY >
<TABLE BORDER=1 ALIGN=right>
   <TR>
     <TD ID=oCell><div id="parentdiv" style="position:relative" >parentdiv<div id="sondiv" style="position:relative">sondiv</div></div></TD>
   </TR>
</TABLE>

运行结果parentdiv.offsetParent.tagName IS "body"

                 sondiv.offsetParent.id     IS "parentdiv"

3.<BODY >
<TABLE BORDER=1 ALIGN=right>
   <TR>
     <TD ID=oCell><div id="parentdiv" >parentdiv<div id="sondiv" style="position:relative">sondiv</div></div></TD>
   </TR>
</TABLE>


运行结果parentdiv.offsetParent.tagName IS "TD"

                 sondiv.offsetParent.tagName    IS "body"
[color=red]

4.<BODY >
<TABLE BORDER=1 ALIGN=right>
   <TR>
     <TD ID=oCell><div id="parentdiv" >parentdiv<div id="sondiv">sondiv</div></div></TD>
   </TR>
</TABLE>


运行结果parentdiv.offsetParent.tagName IS "TD"

                 sondiv.offsetParent.tagName    IS "TD"

5.<BODY >
<TABLE BORDER=1 ALIGN=right style="position:relative">
   <TR>
     <TD ID=oCell><div id="parentdiv" style="position:relative" >parentdiv<div id="sondiv" style="position:relative">sondiv</div></div></TD>
   </TR>
</TABLE>

运行结果parentdiv.offsetParent.tagName IS "Table"

                 sondiv.offsetParent.tagName    IS "parentdiv" [/color]
分享到:
评论

相关推荐

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

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

    js parentElement和offsetParent之间的区别

    在JavaScript中,`parentElement`和`offsetParent`都是用于处理元素上下级关系的属性,但它们的作用和应用场景有所不同。本文将深入解析这两个属性的区别及其使用。 首先,`parentElement`属性是DOM层次结构的一...

    用css样式固定表头和列

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

    DOM相关内容速查手册

    DOM相关内容速查手册中涉及了许多关于DOM对象及其属性的知识点,下面将详细解释其中的关键点。 1. **offsetHeight** 和 **offsetWidth**:这两个属性分别返回元素的高度和宽度,包括内边距和边框,但不包括外边距。...

    html固定表格头和列

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

    html学习心得,我感觉很好

    OFFSETPARENT 属性用于获取定义对象 offsetTop 和 offsetLeft 属性的容器对象的引用。 47. OFFSETTOP 属性 OFFSETTOP 属性用于获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置。 48. ...

    JavaScript Table行定位效果

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

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

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

    Js Div属性大全

    33. parentElement/parentNode:获取Div元素的父级元素和节点。 34. parentTextEdit:在富文本编辑环境中,获取可以创建TextRange对象的父元素。 了解并熟练运用这些Div属性,可以帮助开发者创建功能丰富的动态...

    JS中offset和匀速动画详解

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

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

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

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

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

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

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

    Html页面的dom常见属性

    14. **parentElement/parentNode**: - **定义**:分别返回当前元素的父元素或父节点。 - **应用场景**:在DOM遍历和操作中常用。 15. **pageBreakAfter/pageBreakBefore**: - **定义**:设置页面分隔符的类型...

    html中select的属性.pdf

    38. offsetParent:获取定义对象 offsetTop 和 offsetLeft 属性的容器对象的引用。该属性控制 Select 元素的容器对象。 39. offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置。该属性...

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

    在这个例子中,我们需要这个节点的`offsetTop`值,它表示元素相对于其offsetParent的顶部的距离。 然而,有时候`commonAncestorContainer`可能是行内元素,这时它可能没有`offsetTop`属性。因此,我们需要找到它的...

    CSS_style属性大全

    - **说明**: 类似于 `begin` 属性,但用于定义元素动画结束的时间点。 **15. firstChild** - **功能**: 获取对象的childNodes集合的第一个子对象的引用。 - **语法**: `firstChild: [element]` - **说明**: ...

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

    在JavaScript中,对DOM元素的操作是网页开发过程中非常常见且重要的部分。本文主要针对获取子节点、父...上述知识点涉及的操作,都是DOM编程中经常遇到的场景,理解和熟练使用这些方法,对于提升前端开发能力至关重要。

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

    兼容性问题常常是开发者面临的一大挑战,因为不同的浏览器(如IE和Firefox)对某些API的实现有所不同。本文将详细介绍如何在JavaScript中解决这个问题,以及在不同浏览器间实现兼容性。 首先,让我们明确一个基本...

Global site tag (gtag.js) - Google Analytics