2015-06-29 14 views
7

Jeśli chcę to margines przy pomiarze szerokości elementu może wzywam element.outerWidth(true); Jednak nie mogę znaleźć podobny sposób uzyskać w lewo przesunięcie elementu w pojemniku, w którym margines jest uwzględniony. element.position().left nie uwzględnia marginesu.pozycja jQuery() to margines

Próbowałem element[0].getBoundingClientRect().left, i że działa, ale jest tam podobna wezwanie jQuery?

EDIT: Wydaje się, że rodzimy wywołanie javascript powyżej nie daje mi margines albo ..

Odpowiedz

15

To ograniczenie .position jQuery(), która ma tego ograniczenia:

Uwaga: jQuery nie obsługuje coraz współrzędnych położenia ukrytych elementów lub stanowiących granice, marginesy lub dopełnienia określonych w elemencie ciała.

Zalecane rozwiązanie:

var position = $element.position(); 
x = position.left + parseInt($element.css('marginLeft'), 10); 
y = position.top + parseInt($element.css('marginTop'), 10); 
+0

Zakładam, że kod w tej odpowiedzi działa w niektórych sytuacjach, ale odpytywanie 'marginLeft' dla mnie zwraca łańcuch sufiksem jednostek, na przykład, „20 pikseli”, tak więc musi być zamienione. Zakładając, że jQuery zawsze zwraca marginesy w pikselach, coś takiego zadziała: x = position.left + parseInt ($ element.css ('marginLeft')) – David

+0

Dzięki @David, poprawiono. –

-1

użyć jQuery offsetu() funkcja

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>offset demo</title> 
    <style> 
    p { 
    margin-left: 10px; 
    } 
    </style> 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
</head> 
<body> 

<p>Hello</p><p>2nd Paragraph</p> 

<script> 
var p = $("p:last"); 
var offset = p.offset(); 
p.html("left: " + offset.left + ", top: " + offset.top); 
</script> 

</body> 
</html> 
+0

Funkcja offset() ma takie samo ograniczenie (https://api.jquery.com/offset/): _Uwaga: jQuery nie obsługuje pobierania współrzędnych przesunięcia ukrytych elementów ani rozliczania obramowań, marginesów ani wypełnienia ustawionych na element ciała._ – Ousmane