2010-07-08 21 views
160

Jaka jest różnica między position() i offset()? Starałem się wykonać następujące czynności w przypadku kliknij:jQuery: Różnica między pozycją() i offsetem()

console.info($(this).position(), $(this).offset()); 

i wydają się powrócić dokładnie taka sama ... (Element klikany jest w komórce tabeli w tabeli)

Odpowiedz

194

To zależy od tego kontekstu element jest w position zwraca pozycję względem przesunięcia rodzica i offset robi to samo względem dokumentu. Oczywiście, jeśli dokument jest rodzicem offsetowym, co często ma miejsce, będą one identyczne.

Jeśli masz układ jak ten, jednakże:

<div style="position: absolute; top: 200; left: 200;"> 
    <div id="sub"></div> 
</div> 

Następnie offset dla sub będzie 200: 200, ale jego position będzie 0: 0.

+2

Więc rodzic-offset jest pierwszym rodzicem z pozycją ustawioną na absolutną? lub? – Svish

+1

@Svish: whoa, czy naprawdę tęsknię za wcięciem kodu? thaks do edycji. tak, rodzicem nadrzędnym jest najbliższy * umieszczony * rodzic. to jest element z pozycją ustawioną na absolutną, względną lub stałą (ale nie statyczną). nie jest to jQuery ani nawet javascript, masz takie samo zachowanie w css: jeśli chcesz nadać 'sub' pozycjonowaniu absolutnemu 0: 0, to będzie ono w lewym górnym rogu offsetu. –

+0

Awesome, to całkowicie ma sens! (Nie ma problemu z edycją, hehe. Robię to cały czas: p) – Svish

27

.offset() Metoda pozwala nam pobrać aktualną pozycję elementu w stosunku do dokumentu. Porównaj to z .position(), która pobiera aktualną pozycję względem rodzica offsetowego. Podczas pozycjonowania nowego elementu na istniejącym dla globalnej manipulacji (w szczególności dla implementacji przeciągania i upuszczania), bardziej przydatne jest .offset().

. Źródło: http://api.jquery.com/offset/

+3

co postulowano powyższym co uważane jest za rodzica offsetowego? Wydaje się, że wywołanie position() na pierwszym divu w innym div nie zawsze zwraca 0,0 - nawet wtedy, gdy nie ma już innego stylu ani pozycjonowania. – Kokodoko

+2

jquery.offsetParent(): http://api.jquery.com/offsetparent/ "Uzyskaj najbliższy element przodka, który jest pozycjonowany." –

-7

Obie funkcje zwracają zwykły obiekt z dwiema właściwościami: szerokość & wysokość.

Przesunięcie() odnosi się do pozycji względem dokumentu.

pozycji() odnosi się do pozycji w stosunku do elementu rodzica

ale kiedy pozycja CSS obiektu jest „absolutne” obie funkcje powróci szerokość = 0 & wysokość = 0

+5

Korekta : offset i position zwraca obiekt z właściwościami left i top, a nie width i height. –

Powiązane problemy