[JavaScript]offsetParent和parentElement的區別

來源:互聯網
上載者:User
作者:未知  來源於:網路轉載  發布時間:2006-9-30 23:42:32
一直以為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"
 
 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"
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.