[转]offsetParent和parentElement的区别
来源:互联网 发布:淘宝买到二手货怎么办 编辑:程序博客网 时间:2024/05/21 01:59
一直以为offsetParent和parentElement是一回事,最近在做web控件才发现原来的理解是大错特错。
parentElement 在msdn的解释是Retrieves the parent object in the object hierarchy.
而offsetParent在msdn的解释是Retrieves a reference to the container objectthat 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 propertyreturns the TABLE object for the TD object; in Microsoft® InternetExplorer 4.0 it returns the TR object. You can use the parentElementproperty 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<divid="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<divid="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<divid="sondiv" style="position:relative">sondiv</div></div></TD>
</TR>
</TABLE>
运行结果parentdiv.offsetParent.tagName IS "TD"
sondiv.offsetParent.tagName IS "body"
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<divid="sondiv" style="position:relative">sondiv</div></div></TD>
</TR>
</TABLE>
运行结果parentdiv.offsetParent.tagName IS "Table"
sondiv.offsetParent.tagName IS "parentdiv"
parentElement 在msdn的解释是Retrieves the parent object in the object hierarchy.
而offsetParent在msdn的解释是Retrieves a reference to the container objectthat 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 propertyreturns the TABLE object for the TD object; in Microsoft® InternetExplorer 4.0 it returns the TR object. You can use the parentElementproperty 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<divid="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<divid="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<divid="sondiv" style="position:relative">sondiv</div></div></TD>
</TR>
</TABLE>
运行结果parentdiv.offsetParent.tagName IS "TD"
sondiv.offsetParent.tagName IS "body"
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<divid="sondiv" style="position:relative">sondiv</div></div></TD>
</TR>
</TABLE>
运行结果parentdiv.offsetParent.tagName IS "Table"
sondiv.offsetParent.tagName IS "parentdiv"
- [转]offsetParent和parentElement的区别
- [JavaScript][转]offsetParent和parentElement的区别
- offsetParent和parentElement的区别
- offsetParent和parentElement的区别
- parentElement 和 offsetParent 之间的区别
- parentElement和parentNode的区别
- offsetParent与parentElement ,parentNode,parentElement,childNodes和children
- offsetParent与parentElement ,parentNode,parentElement,childNodes和children
- Js-parentNode、parentElement,childNodes、children 的区别
- parentNode,parentElement,childNodes,children的区别
- parentNode和offsetParent的使用
- parentNode,parentElement 区别
- Js中parentNode,parentElement,childNodes,children之间的区别
- parentNode、parentElement,childNodes、children 区别
- JS 中的parentElement的用法
- event.srcElement.parentElement的用法
- 关于定位、浮动、z-index 和 offsetParent 的一些概念
- offsetParent的理解
- 2008.09.03 多云转雷阵雨
- windows进程间通讯的各种方法
- lucene.net,包括对htm,word,doc,pdf,等等式进行parse解析,取得内容
- 对经太空搭载的“神舟三号口服液”口服液的生产菌株进行了科学鉴定.^&
- error LNK2001: unresolved external symbol __imp__
- [转]offsetParent和parentElement的区别
- hibernate3学习笔记(十七)|关系映射:多对一
- 打造windows下的嵌入式开发工具(3):gmp-4.2.3
- Servlet2.3规范
- 读取操作PDF的Java类库
- 百度新闻搜索参数精解
- IIS运行ASP程序出现Server Application Error的解决办法
- Tools:使用oradim恢复windows上的数据库
- 关于Weblogic GBK/GB2312/UTF-8乱码的问题