ie에서div의 절대 경계가 틀렸습니다.

이 코드는 Firefox와 i6에서div를 눌렀을 때div의 절대 상단 간격이 나오지만 ff와 i6의 값은 다르다.ff는 옳고 i는 틀렸다.여러분 이 getTop에 문제가 있는지 좀 봐주세요...????
function getLeft(el){        var curleft=0;        var obj=el;        if(obj.offsetParent){               while(obj.offsetParent) {                    curleft+=obj.offsetLeft;                    obj=obj.offsetParent;                       }        }else if(obj.x){            curleft+=obj.x;        }        return curleft;    }function getTop (el){        var curtop=0;        var obj=el;        if(obj.offsetParent){               while(obj.offsetParent){                    curtop+=obj.offsetTop;                    obj=obj.offsetParent;               }        }else if(obj.y){            curtop+=obj.y;        }        return curtop;    }

 
 
 
function getOffset(obj) {        var x = obj.offsetLeft || 0;        var y = obj.offsetTop || 0;        var temp = obj;        while(temp.offsetParent) {            temp = temp.offsetParent;            x += temp.offsetLeft;            y += temp.offsetTop;        }        return {left: x, top: y};} 사실 가장 주요한 원인은 페이지가 이 아래의 CSS를 추가하지 않았기 때문에 브라우저에 해석 차이가 생겼을 수 있습니다.
CSS code

    
    
    
    
* { padding : 0 ; margin : 0 ; }

 
IE는 기본적으로 IE 박스 모델을 사용하지만 Firefox는 W3C 박스 모델을 사용합니다.
HTML 더하기:

이 한 마디로 IE가 W3C 상자를 사용할 수 있게 할 수 있다.
 



모두 좋다
 

td의 요소는 첫 번째 절대/상대적 포지셔닝의hierarchy parent를offsetParent로 간주합니다. 찾지 못하면 세 가지 상황으로 나누어 토론합니다. 하나, 만약 이 요소가 절대/상대적인 포지셔닝이 없다면 td를offsetParent로 간주합니다 둘째, 만약에 이 원소가 절대/상대적 위치를 정하고 테이블이 절대/상대적 위치를 정하지 않는다면 바디를 오프셋 Parent로 간주할 것이다 셋째, 이 요소가 절대/상대적 위치를 정하고 테이블이 절대/상대적 위치를 정하면 테이블을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> </BODY> 실행 결과: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> </BODY>  실행 결과: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> </BODY>  실행 결과: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> </BODY>  실행 결과: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> </BODY> 실행 결과:parentdiv.offsetParent.tagName IS "Table"           sondiv.offsetParent.tagName IS "parentdiv"   js.offsetParent 속성 수장하다 참조: offsetParent 속성은 대상의 인용을 되돌려줍니다. 이 대상은 offsetParent를 호출하는 요소와 가장 가까운 (포함 차원에서 가장 가까운) 이며, CSS가 포지셔닝한 용기 요소입니다.만약 이 용기 요소가 CSS 포지셔닝을 하지 않았다면 offsetParent 속성의 수치는 루트 요소(표준 호환 모드에서는 html 요소, 괴이한 표현 모드에서는 바디 요소)의 인용이다.용기 원소의 스타일.display가 "none"으로 설정되었을 때 (IE 및 Opera 제외) offsetParent 속성은null로 되돌아옵니다. 구문: parentObj = element.offsetParent 변수: ·parentObj는 원소의 인용으로 현재 원소의 편이량이 그 중에서 계산된다.   js.offsetParent 등록 정보 모음 참조: offsetParent 속성은 대상의 인용을 되돌려줍니다. 이 대상은 offsetParent를 호출하는 요소와 가장 가까운 (포함 차원에서 가장 가까운) 이며, CSS가 포지셔닝한 용기 요소입니다.만약 이 용기 요소가 CSS 포지셔닝을 하지 않았다면 offsetParent 속성의 수치는 루트 요소(표준 호환 모드에서는 html 요소, 괴이한 표현 모드에서는 바디 요소)의 인용이다.용기 원소의 스타일.display가 "none"으로 설정되었을 때 (IE 및 Opera 제외) offsetParent 속성은null로 되돌아옵니다. 구문: parentObj = element.offsetParent 변수: ·parentObj는 원소의 인용으로 현재 원소의 편이량이 그 중에서 계산된다. 테스트 코드 1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> <script type="text/javascript" language="JavaScript"> function offset_init(){ var pElement = document.getElementById("sonObj"); parentObj = pElement.offsetParent; alert(parentObj.tagName); } </script> </head> <body onload= "offset init()" <div id= "parent"> <p id= "sonObj"> OffsetParent 속성 테스트 </p> </div> </body> </html> 테스트 결과:Firefox3: "BODY" Internet Explorer 7: "BODY" Opera 9.51: "BODY" Chrome 0.2: "BODY" Sari: "BODY""BODY 결론: 원소와 부모 원소가 CSS로 위치를 정하지 않았을 때 이 원소의offsetParent 속성의 수치는 루트 원소이다. 더 정확히 말하면 이 원소의 각종 편이량 계산(offsetTop, offsetLeft 등)의 참조물은 Body 원소이다. (사실 표준 호환 모드든 괴이한 모드든 루트 원소는 Body 원소이다) 테스트 코드 3:<! DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> <style type="text/css"> #Grandfather{ position:relative; left:25px; top:188px; border:1px solid black; } </style> <script type="text/javascript" language="JavaScript"> function offset_init(){ var pElement = document.getElementById("sonObj"); parentObj = pElement.offsetParent; alert(parentObj.tagName); } </script> </head> <body onload='offset init()'<h1 id='Grandfather'> <div id='parent'> <p id='sonObj'> OffsetParent 속성 테스트</p> </div> </h1> 바디> </html> 테스트 결과: Firefox3:'H1'InternetExplorer 7:'sonObj'> 7:'son Opera 9.51'Opera 9.51:'H1'Opera 9.51:'H1'H1:'H1'Chrome'Hrome'요소인'Hrome:'Hrome Hrome Hrome'요소인 Hrome:'HromeCSS를 찾을 때(absolute 또는 relative)그러면 이 요소의 offsetParent 속성의 수치는 DOM 구조 차원에서 가장 가깝고 CSS가 지정한 요소입니다.테스트 코드 4:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> <style type="text/css"> #sonObj{ position:relative; left:25px; top:188px; border:1px solid black; } </style> <script type="text/javascript" language="JavaScript"> function offset_init(){ var pElement = document.getElementById("sonObj"); parentObj = pElement.offsetParent; alert(parentObj.tagName); } </script> </head> <body onload='offset init()'<h1 id='Grandfather'> <div id='parent'> <p id='son Obj'> Offset Parent 속성 테스트</p> </div> </h1> 바디> </html> 테스트 결과: Firefody x 3:'BODY'InternetExplorer 7:'son Obbbbj'> Opera 1:'BODY'Opera 1:'BODY DRODY DRome:'BODY DRome DY 0.2:'BODY D: BODY D: Y D: 요소는 CSS로 배치됩니다.부모 요소와 DOM 구조 차원에서 CSS 포지셔닝을 하지 않았을 때 이 요소의 offsetParent 속성의 수치는 HTMLBODYelement이다.더 정확히 말하면 이 원소의 각종 편이량 계산(offsetTop,offsetLeft 등)의 참조물은 바디 원소이다.테스트 코드 2:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> <style type="text/css"> #parent{ position:absolute;                 <!--position:relative;--> left:25px; top:188px; border:1px solid black; } </style> <script type="text/javascript" language="JavaScript"> function offset_init(){ var pElement = document.getElementById("sonObj"); parentObj = pElement.offsetParent; alert(parentObj.tagName); } </script> </head> <body onload='offset init(()'<div id='parent'>div 테스트 코드<p id='sonObj'> Offset init(offset init()'<div()'</div idy> </html> </html> 테스트 결과: Firefox3:'DIV'InteredeV InternetExplorer 7:'DIV'Opera 9.5:'DIV'Oppera 9.51:'DIV'Chrome 0.2:'DIV'Chrome 0.2:'DIV'0.2:'DIV'SV SarriV Sari 3:'DI3:'DIV DI3:'DI3:'DI)그러면 이 요소의 offsetParent 속성 값이 부모 요소로 지정됩니다.더 정확히 말하면 이 원소의 각종 편이량 계산(offsetTop,offsetLeft 등)의 참조물은 그 부원소이다.   

좋은 웹페이지 즐겨찾기