¿Alguien puede mostrarme cómo obtener la posición top& leftde un elemento divo spancuando 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 55pxdevuelve el valor de . Sin embargo, si intento eso para span'12a', no se devuelve nada.
Tengo un montón de div/ spans en una página para las que no puedo especificar top/ leftproperties, pero necesito mostrar un divdirectamente debajo de ese elemento.
fuente

Puede llamar al método
getBoundingClientRect()en una referencia al elemento. A continuación, puede examinar lastop,left,righty / obottompropiedades ...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.getBoundingClientRecttienetransformen 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.readyporwindow.loadporqueloadespera todos los elementos para que obtenga su tamaño en lugar de simplemente preparar el DOM. En mi experiencia,loadresulta 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