Lấy và đặt vị trí với jQuery .offset ()


106

Làm cách nào để lấy và đặt vị trí của một phần tử bằng .offsetphương thức jQuery ?

Giả sử tôi có một div layer1và một div khác layer2. Làm cách nào để tôi có được vị trí layer1và đặt vị trí tương tự layer2?


6
Denise, bạn thậm chí đã kiểm tra phương thức .offset () 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ô về cơ bản không bao giờ trở lại
jcollum

6
Tôi có thể cho điểm của cô ấy?
ganders vào

Câu trả lời:


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

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

7
Bạn chỉ có thể vượt qua toàn bộ offsetđối tượng, do đó //setsẽ trở thành: $("#secondElementId").offset(offset)
mecampbellsoup

Chào! làm thế nào tôi có thể đặt ở dưới cùng và bên phải của div? không có tài sản đáy, bên phải bù đắp
JerryGoyal

34

Tôi đề nghị một 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. Để có tài liệu và bản trình diễn đầy đủ, hãy xem: http://jqueryui.com/demos/position/#option-offset .

Đây là một cách để định vị các phần 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 đã bị bỏ phiếu hai lần, không có lời giải thích. Vui lòng cho biết lý do tại sao, nếu bạn 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

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

@KSev - Tôi đến từ tương lai. jQuery vẫn không có một setter trên .position... Xem: api.jquery.com/position
Koshinae

@Koshinae Nó là một phần của jQuery "UI". Xem liên kết ở trên hoặc thử jqueryui.com/position . Ngoài ra, nếu bạn đang sử dụng jQuery, bạn có thể muốn xem xét sử dụng angleJS 2.0. Tuy nhiên, tôi hy vọng bạn đang duy trì mã kế thừa.
KSev

16

Điều đó có thể làm được nhưng bạn phải biết rằng việc sử dụng offset()đặt vị trí của phần tử so với tài liệu:

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

0

Đây là một tùy chọn. Đây chỉ là cho các tọa độ x.

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

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

Tôi đã +1. Nó có vẻ phù hợp với tôi và về cơ bản nó giống với câu trả lời chưa được chọn bên dưới có hơn 85 phiếu bầu.
Paul Nelson Baker

Đã làm cho tôi. Cảm ơn vì sự đóng góp!
Erlend KH

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.