一直以为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.
在JavaScript中,`parentElement`和`offsetParent`都是用于处理元素上下级关系的属性,但它们的作用和应用场景有所不同。本文将深入解析这两个属性的区别及其使用。 首先,`parentElement`属性是DOM层次结构的一...
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #E6ECF0; } ``` ### 实现细节 - **使用`expression`**: 虽然在现代前端开发中,直接使用`expression`并不被...
DOM相关内容速查手册中涉及了许多关于DOM对象及其属性的知识点,下面将详细解释其中的关键点。 1. **offsetHeight** 和 **offsetWidth**:这两个属性分别返回元素的高度和宽度,包括内边距和边框,但不包括外边距。...
例如,在上面的代码中,`top: expression(this.offsetParent.scrollTop)`和`left: expression(this.parentElement.offsetParent.scrollLeft)`就是利用`expression`表达式动态计算并设置元素的`top`和`left`值,确保...
OFFSETPARENT 属性用于获取定义对象 offsetTop 和 offsetLeft 属性的容器对象的引用。 47. OFFSETTOP 属性 OFFSETTOP 属性用于获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置。 48. ...
上面用到了parentNode,这里顺便说说它跟offsetParent,parentElement的区别。 先看看parentNode在w3c的说明: The parent of this node. All nodes, except Document, DocumentFragment, and Attr may have a ...
1、js通过样式的方法、了解parentElement和offsetParent的原理,自己的布局不一样,css也就不一样,这种方法是浏览器可能会比较慢的哦!! 2、2\3方法都是用jquery也有仿excel的方法,自己也可以去网上找一找
33. parentElement/parentNode:获取Div元素的父级元素和节点。 34. parentTextEdit:在富文本编辑环境中,获取可以创建TextRange对象的父元素。 了解并熟练运用这些Div属性,可以帮助开发者创建功能丰富的动态...
在JavaScript中,`offset`属性是用来获取或设置元素相对于其offsetParent元素的位置和尺寸的。offset家族包括`offsetWidth`、`offsetHeight`、`offsetLeft`和`offsetTop`,以及`offsetParent`,它们提供了对元素尺寸...
这里使用`left: expression(this.parentElement.offsetParent.parentElement.scrollLeft)`来使列与父元素的滚动条左边对齐。同样,`background-color`定义了背景颜色。 3. `.FixedColumnAndRows` 类结合了前两者的...
本文主要探讨了在Internet Explorer(IE)和Firefox浏览器中事件对象`event`的区别。 首先,IE浏览器有一个全局的`window.event`对象,可以用来访问当前事件的信息。然而,Firefox并不支持这个全局变量。在Firefox...
最后,在操作DOM树时,IE使用`parentElement`和`parentElement.children`来获取父节点和子节点集合,删除节点用`element.removeNode(true)`;Firefox则使用`parentNode`和`parentNode.childNodes`,删除节点用`node....
14. **parentElement/parentNode**: - **定义**:分别返回当前元素的父元素或父节点。 - **应用场景**:在DOM遍历和操作中常用。 15. **pageBreakAfter/pageBreakBefore**: - **定义**:设置页面分隔符的类型...
38. offsetParent:获取定义对象 offsetTop 和 offsetLeft 属性的容器对象的引用。该属性控制 Select 元素的容器对象。 39. offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置。该属性...
在这个例子中,我们需要这个节点的`offsetTop`值,它表示元素相对于其offsetParent的顶部的距离。 然而,有时候`commonAncestorContainer`可能是行内元素,这时它可能没有`offsetTop`属性。因此,我们需要找到它的...
- **说明**: 类似于 `begin` 属性,但用于定义元素动画结束的时间点。 **15. firstChild** - **功能**: 获取对象的childNodes集合的第一个子对象的引用。 - **语法**: `firstChild: [element]` - **说明**: ...
在JavaScript中,对DOM元素的操作是网页开发过程中非常常见且重要的部分。本文主要针对获取子节点、父...上述知识点涉及的操作,都是DOM编程中经常遇到的场景,理解和熟练使用这些方法,对于提升前端开发能力至关重要。
兼容性问题常常是开发者面临的一大挑战,因为不同的浏览器(如IE和Firefox)对某些API的实现有所不同。本文将详细介绍如何在JavaScript中解决这个问题,以及在不同浏览器间实现兼容性。 首先,让我们明确一个基本...