zoukankan      html  css  js  c++  java
  • offsetParent和parentElement的区别

    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"

    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" 

  • 相关阅读:
    懒加载——实现原理
    html5shiv.js和respond.min.js
    点击app分享链接,js判断手机是否安装某款app,有就尝试打开,没有就下载
    ajax获取后台数据渲染(整片文章不分段落)解决方案,要使用htmL方式输出
    +-下拉菜单
    html 中a标签的问题(无反应,跳转,调用方法)
    js中两种定时器,setTimeout和setInterval的区别
    chrome 调试进入 paused in debugger 状态解决办法
    mybatis-plus 获取新增id
    linux unzip和zip
  • 原文地址:https://www.cnblogs.com/liping13599168/p/653076.html
Copyright © 2011-2022 走看看