2015-06-29 15 views
7

Nếu tôi muốn bao gồm lề khi đo chiều rộng của phần tử tôi có thể gọi element.outerWidth(true); Tuy nhiên, tôi không thể tìm thấy cách tương tự để lấy bù đắp trái của phần tử trong vùng chứa, trong đó số tiền ký quỹ được bao gồm. element.position().left không bao gồm ký quỹ.Vị trí Jquery() bao gồm lề

Tôi đã thử element[0].getBoundingClientRect().left và hoạt động nhưng có cuộc gọi jquery tương tự không?

EDIT: Dường như cuộc gọi javascript bản địa trên không cho tôi bên lề hoặc ..

Trả lời

15

Đây là một hạn chế của .position jQuery(), trong đó có hạn chế này:

Lưu ý: jQuery không hỗ trợ nhận tọa độ vị trí của các thành phần ẩn hoặc chiếm biên giới, lề, hoặc phần đệm được đặt trên phần tử nội dung.

khuyến nghị giải pháp:

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

tôi giả sử mã trong câu trả lời này hoạt động trong một số tình huống, nhưng truy vấn 'marginLeft' cho tôi trả về một chuỗi với hậu tố đơn vị, ví dụ: "20px", vì vậy cần phải chuyển đổi. Giả sử jQuery luôn trả về lề bằng pixel, một cái gì đó như thế này sẽ hoạt động: x = position.left + parseInt ($ element.css ('marginLeft')) – David

+0

Cảm ơn @David, đã sửa. Hàm –

-1

Sử dụng Jquery bù đắp() chức năng

<!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

offset() có [cùng giới hạn] (https://api.jquery.com/offset/): _Note: jQuery không hỗ trợ nhận các tọa độ offset của các phần tử ẩn hoặc chiếm các đường viền, lề, hoặc bộ đệm được đặt phần tử body._ – Ousmane

Các vấn đề liên quan