2011-01-06 27 views
102

Cách nhận và đặt vị trí của một phần tử với phương thức jQuery .offset?Nhận và đặt vị trí với jQuery .offset()

Giả sử tôi có div layer1 và một số layer2 khác. Làm cách nào để có được vị trí của layer1 và đặt cùng một vị trí thành layer2?

+6

Denise, cậu thậm chí kiểm tra .offset() phương pháp trên trang web jQuery? Ngoài ra, tại sao bạn không chấp nhận câu trả lời của Steve dưới đây ?! – Rafid

+1

@Rafid cô ấy về cơ bản chưa bao giờ quay lại – jcollum

+6

Tôi có thể có điểm của cô ấy không? – ganders

Trả lời

182
//Get 
var p = $("#elementId"); 
var offset = p.offset(); 

//set 
$("#secondElementId").offset({ top: offset.top, left: offset.left}); 
+3

Câu trả lời rõ ràng và rõ ràng/sạch sẽ. – sabiland

+7

Bạn chỉ có thể truyền toàn bộ đối tượng 'offset', vì vậy' // set' sẽ trở thành: '$ (" # secondElementId "). Offset (offset)' – mecampbellsoup

+0

hey! làm thế nào tôi có thể thiết lập để dưới cùng và bên phải của div? không có thuộc tính dưới cùng, bên phải trong offset – JerryGoyal

15

Đó là doable nhưng bạn phải biết rằng việc sử dụng offset() đặt vị trí của các yếu tố liên quan đến tài liệu:

$('.layer1').offset($('.layer2').offset()); 
34

tôi khuyên bạn nên lựa chọn khác. jQuery UI có một tính năng vị trí mới cho phép bạn định vị các phần tử tương đối với nhau. Để xem tài liệu và bản demo hoàn chỉnh, hãy xem: http://jqueryui.com/demos/position/#option-offset.

Dưới đây là một cách để xác định vị trí các yếu tố của bạn bằng cách sử dụng tính năng vị trí:

var options = { 
    "my": "top left", 
    "at": "top left", 
    "of": ".layer1" 
}; 
$(".layer2").position(options); 
+13

Câu trả lời này đã được bỏ phiếu xuống hai lần, không có lời giải thích. Xin vui lòng cho biết lý do tại sao, nếu bạn xuống bỏ phiếu cho câu trả lời của tôi. Cảm ơn! – KSev

+2

Có thể đó là vì bạn sử dụng jQuery UI trong khi OP chỉ hỏi jQuery. – pram

+6

thường mọi người đi xa với việc bỏ phiếu xuống. Cho phép không cho rằng một câu trả lời rộng hơn là vô ích cho người khác ngay cả khi nó có thể là một sự mở rộng của OP. Đừng để tôi bắt đầu vào 'đóng cửa vì đây không phải là một câu hỏi thích hợp';) – landed

0

Đây là một lựa chọn. Điều này chỉ dành cho các tọa độ x.

var div1Pos = $("#div1").offset(); 
var div1X = div1Pos.left; 
$('#div2').css({left: div1X}); 
+0

offset(). Left và css.left không giống nhau, chúng có thể có hoặc không có giá trị giống nhau tùy thuộc vào cấu trúc trang. – Kalle

+0

Tôi đã +1. Nó có vẻ làm việc tốt cho tôi và nó cơ bản giống như câu trả lời chưa được trả lời dưới đây có hơn 85 phiếu bầu. –

+0

Làm việc cho tôi. Cảm ơn sự đóng góp! –

0
var redBox = $(".post"); 

var greenBox = $(".post1"); 

var offset = redBox.offset(); 

$(".post1").css({'left': +offset.left}); 
$(".post1").html("Left :" +offset.left); 

http://jsfiddle.net/va836/159/

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