Quelqu'un peut-il me montrer comment obtenir la top
& left
position d'un élément div
ou span
quand on n'est pas spécifié?
c'est à dire:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
Dans ce qui précède, si je fais:
document.getElementById('11a').style.top
La valeur de 55px
est renvoyée. Cependant, si j'essaye cela pour span
«12a», alors rien n'est retourné.
J'ai un tas de div
/ span
s sur une page pour laquelle je ne peux pas spécifier les propriétés top
/ left
, mais je dois afficher un div
directement sous cet élément.
la source
Vous pouvez appeler la méthode
getBoundingClientRect()
sur une référence à l'élément. Ensuite , vous pouvez examiner lestop
,left
,right
et / ou desbottom
propriétés ...Si vous utilisez jQuery, vous pouvez utiliser le code plus succinct ...
la source
getBoundingClientRect()
devrait être utilisé - et cela devrait être la réponse acceptée! Mais vous n'avez pas besoin d'un "navigateur moderne" pour que cela fonctionne, consultez la liste de compatibilité que j'ai montrée ici: stackoverflow.com/questions/1480133/… . Cela fonctionne bien dans IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ et Opera.getBoundingClientRect()
renvoie des valeurs relatives à la fenêtre, pas au document. Pour cela, vous voudriez quelque chose commetop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
prendtransform
en compte.Alors que la réponse de @ nickf fonctionne. Si vous n'aimez pas les anciens navigateurs, vous pouvez utiliser cette version Javascript pur. Fonctionne dans IE9 + et autres
la source
Comme Alex l'a noté, vous pouvez utiliser jQuery offset () pour obtenir la position par rapport au flux de documents. Utilisez position () pour ses coordonnées x, y par rapport au parent.
EDIT: Switched
document.ready
pourwindow.load
cause d'load
attente pour tous les éléments afin que vous obteniez leur taille au lieu de préparer simplement le DOM. D'après mon expérience, il enload
résulte moins d'éléments mal positionnés en Javascript.la source
Pour tous ceux qui n'ont besoin que de la position en haut ou à gauche, de légères modifications du code lisible de @ Nickf font l'affaire.
et
la source
Je me rends compte que c'est un vieux fil de discussion, mais la réponse de @alex doit être marquée comme la bonne réponse
element.getBoundingClientRect()
est une correspondance exacte avec jQuery$(element).offset()
Et il est compatible avec IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
la source