¿Alguien puede mostrarme cómo obtener la posición top
& left
de un elemento div
o span
cuando uno no está especificado?
es decir:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
En lo anterior, si lo hago:
document.getElementById('11a').style.top
Se 55px
devuelve el valor de . Sin embargo, si intento eso para span
'12a', no se devuelve nada.
Tengo un montón de div
/ span
s en una página para las que no puedo especificar top
/ left
properties, pero necesito mostrar un div
directamente debajo de ese elemento.
fuente
Puede llamar al método
getBoundingClientRect()
en una referencia al elemento. A continuación, puede examinar lastop
,left
,right
y / obottom
propiedades ...Si usa jQuery, puede usar el código más sucinto ...
fuente
getBoundingClientRect()
debe usarse, ¡y esta debe ser la respuesta aceptada! Pero no necesita un "navegador moderno" para que esto funcione, consulte la lista de compatibilidad que mostré aquí: stackoverflow.com/questions/1480133/… . Funciona bien en IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ y Opera.getBoundingClientRect()
devuelve valores relativos a la ventana gráfica, no al documento. Para eso, querrás algo comotop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
tienetransform
en cuenta.Mientras que la respuesta de @ nickf funciona. Si no le interesan los navegadores más antiguos, puede utilizar esta versión pura de Javascript. Funciona en IE9 + y otros
fuente
Como señaló Alex, puede usar jQuery offset () para obtener la posición relativa al flujo del documento. Utilice position () para sus coordenadas x, y relativas al padre.
EDITAR: Cambiado
document.ready
porwindow.load
porqueload
espera todos los elementos para que obtenga su tamaño en lugar de simplemente preparar el DOM. En mi experiencia,load
resulta en menos elementos posicionados incorrectamente en Javascript.fuente
Para cualquiera que necesite solo la posición superior o izquierda, ligeras modificaciones en el código legible de @ Nickf es suficiente.
y
fuente
Me doy cuenta de que este es un hilo antiguo, pero la respuesta de @alex debe marcarse como la respuesta correcta
element.getBoundingClientRect()
es una coincidencia exacta con jQuery$(element).offset()
Y es compatible con IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
fuente