Mam następującą strukturę DOMRóżnica między offsetParent i parentElement lub parentNode
<body>
<div>
<table>
<outerElement>
<innerElement />
</outerElement>
<table>
</div>
</body>
DIV jest jego przepełnienie ustawiony na auto, więc jeśli tabela rośnie większy - przewija w DIV.
W tym scenariuszu dlaczego table.offsetParent
zwraca treść, podczas gdy zarówno table.parentNode
, jak i zwraca Div?
muszę obliczyć aktualną pozycję innerElement
w oknie, więc przechodzić z niego się thru wszystkich elementów nadrzędnych, zbierając ich wartości offsetTop
i offsetLeft
. Aż do DIV offsetParent
działa dobrze, a następnie przeskakuje bezpośrednio do ciała. Problem polegający na przewijaniu w pewnym momencie, muszę również uwzględnić scrollTop
i scrollLeft
- podobnie jak w DIV w powyższym przykładzie. Problem polega na tym, że jeśli użyję offsetParent
, nigdy nie napotkam DIV jako jednego z rodziców.
UPDATE
Jest to część kodu, która wykonuje ruchu postępowego:
while (oElem && getStyle(oElem, 'position') != 'absolute' && getStyle(oElem, 'position') != 'relative') {
curleft += oElem.offsetLeft;
curtop += oElem.offsetTop;
oElem = oElem.offsetParent;
}
gdzie getStyle
jest funkcją zwyczaj, że w tym przypadku pobiera styl pozycji.
Sprawdź, czy ciało ma pozycję: względna – Krishna
@dumass nie, nie ma. A poza tym "offsetParent" działa na wielu elementach statycznych w dół hiearchii. Zaktualizuję kod, którego używam. –