jQuery: diferença entre posição () e offset ()

Qual é a diferença entre position() e offset()? Eu tentei fazer o seguinte em um evento click:

console.info($(this).position(), $(this).offset());
E parecem voltar exactamente iguais... (O elemento clicado está dentro de uma célula de tabela numa tabela)

Author: Svish, 2010-07-08

3 answers

Isso depende do contexto em que o elemento está. position retorna a posição em relação ao deslocamento pai, e offset faz o mesmo em relação ao documento. Obviamente, se o documento for o pai offset, o que é frequentemente o caso, estes serão idênticos.

Se tiver um layout como este, no entanto:

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

Então o offsetpara sub será 200:200, mas o seu position será 0:0.

 201
Author: David Hedlund, 2010-07-08 09:48:15

O .o método offset () permite-nos obter a posição actual de um elemento em relação ao documento. Contrasta isto com .posição () , que recupera a posição actual em relação à posição inicial compensada. Ao posicionar um novo elemento em cima de um existente para a manipulação global (em particular, para a implementação de drag-and-drop),offset() é o mais útil.

Fonte: http://api.jquery.com/offset/

 28
Author: jAndy, 2010-07-08 09:02:58

Ambas as funções devolvem um objecto simples com duas propriedades: largura e altura.

Deslocamento () refere-se à posição relativa ao documento.

A posição () refere-se à posição relativa ao seu elemento-mãe

Mas quando a posição css do objecto for "absoluta" ambas as funções irão retornar Largura=0 & altura=0

 -6
Author: dwoutsourcing, 2014-12-23 18:32:24