Kann mir jemand zeigen, wie man die top
& left
Position eines div
oder span
Elements erhält, wenn eines nicht angegeben ist?
dh:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
Wenn ich das tue:
document.getElementById('11a').style.top
Der Wert von 55px
wird zurückgegeben. Wenn ich das jedoch für span
'12a' versuche , wird nichts zurückgegeben.
Ich habe eine Reihe von div
/ span
s auf einer Seite, für die ich die top
/ left
-Eigenschaften nicht angeben kann , aber ich muss eine div
direkt unter diesem Element anzeigen .
quelle
Sie können die Methode
getBoundingClientRect()
für einen Verweis auf das Element aufrufen . Dann können Sie die untersuchentop
,left
,right
und / oderbottom
Eigenschaften ...Wenn Sie jQuery verwenden, können Sie den prägnanteren Code verwenden ...
quelle
getBoundingClientRect()
sollte verwendet werden - und dies sollte die akzeptierte Antwort sein! Sie benötigen jedoch keinen "modernen Browser", damit dies funktioniert . Weitere Informationen finden Sie in der Kompatibilitätsliste, die ich hier gezeigt habe: stackoverflow.com/questions/1480133/… . Es funktioniert gut in IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ und Opera.getBoundingClientRect()
Werte relativ zum Ansichtsfenster und nicht zum Dokument zurückgegeben werden. Dafür möchten Sie so etwas wietop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
nimmttransform
berücksichtigt.Während @ nickfs Antwort funktioniert. Wenn Sie ältere Browser nicht mögen, können Sie diese reine Javascript-Version verwenden. Funktioniert in IE9 + und anderen
quelle
Wie Alex bemerkte, können Sie jQuery offset () verwenden, um die Position relativ zum Dokumentfluss zu ermitteln. Verwenden Sie position () für die x, y-Koordinaten relativ zum übergeordneten Element.
EDIT: Switched
document.ready
fürwindow.load
daload
wartet auf alle Elemente , so dass Sie ihre Größe , anstatt einfach die Vorbereitung der DOM erhalten. Nach meiner Erfahrungload
führt dies zu weniger falsch in Javascript positionierten Elementen.quelle
Für alle, die nur die obere oder linke Position benötigen, reichen geringfügige Änderungen am lesbaren Code von @ Nickf aus.
und
quelle
Mir ist klar, dass dies ein alter Thread ist, aber die Antwort von @alex muss als die richtige Antwort markiert werden
element.getBoundingClientRect()
ist eine genaue Übereinstimmung mit jQuery's$(element).offset()
Und es ist kompatibel mit IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
quelle