2012-07-04 38 views
16

Me gustaría saber cómo obtener la distancia/desplazamiento/posición de un elemento relativo a su elemento principal.Obtener la distancia del elemento relativo a su elemento padre

A diferencia de la funcionalidad de jQuery position(), que conseguir es la posición relativa a la matriz de compensar posición, necesito para obtener el (suponiendo) posición estable de un elemento, ya que es la distancia desde la parte superior del elemento que contiene/padre.

ejemplo:

<div id="parent"> 
    <div id="pos1">Has a position of 0px from top of containing parent el.</div> 
    <br style="height:20px;"> 
    <br style="height:20px;"> 
    <div id="pos2">Has a position of 40px from top of containing parent el.</div> 
</div> 

tanto, no importa lo que la posición del elemento padre con el documento, la posición de pos1 y pos2 se comunicaría la misma, ya que no cambian con respecto a sus padres elemento ...

¿Esto es posible?

Respuesta

37

Esto debe hacerlo:

$('#pos1').offset().top - $('#pos1').parent().offset().top - $('#pos1').parent().scrollTop() 
+0

Funciona; pero algo extraño está sucediendo en mi base de código original: la compensación infantil siempre cambia dependiendo de la posición de desplazamiento del elemento principal (que tiene una altura fija, que es más pequeña que la altura combinada de los elementos secundarios). –

+2

@VictorS Veo, intente cambiar el método offset() para el método de posición() – daniloquio

+0

¡Exactamente! Y es por eso que hice la pregunta, porque '.position()' también cambia su valor para el elemento secundario según su posición dentro del elemento padre desplazado. ¡WTF! –

0

Parent.offset() - child.offset()?

Usando jQuery desplazamiento()

+0

si el hijo viene después del padre (en posición vertical), entonces sería Child.offset() - Parent.offset() ¿no? –

+0

Sí, tiene razón, solo tome la idea de tomar ambos en relación con el documento. – sabithpocker

5

Este código funciona para mí.

var child_top = $("#parent_div").scrollTop() + $("#child_div").offset().top 
Cuestiones relacionadas