รับและกำหนดตำแหน่งด้วย jQuery .offset ()


106

วิธีการรับและกำหนดตำแหน่งขององค์ประกอบด้วย.offsetวิธีjQuery

สมมติว่าผมมี div และอื่น ๆlayer1 layer2ฉันจะได้รับตำแหน่งlayer1และตั้งค่าตำแหน่งเดียวกันได้layer2อย่างไร?


6
เดนิสคุณเคยตรวจสอบเมธอด. offset () บนเว็บไซต์ jQuery หรือไม่? นอกจากนี้ทำไมคุณไม่ยอมรับคำตอบของสตีฟด้านล่าง!
Rafid

1
@Rafid โดยพื้นฐานแล้วเธอไม่เคยกลับมา
jcollum

6
ฉันขอคะแนนของเธอได้ไหม
ganders

คำตอบ:


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

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

7
คุณสามารถผ่านoffsetวัตถุทั้งหมดได้ดังนั้นสิ่งที่//setจะกลายเป็น: $("#secondElementId").offset(offset)
mecampbellsoup

เฮ้! ฉันจะตั้งค่าเป็นด้านล่างและด้านขวาของ div ได้อย่างไร ไม่มีคุณสมบัติด้านล่างที่เหมาะสมในการชดเชย
JerryGoyal

34

ขอแนะนำอีกทางเลือกหนึ่ง jQuery UI มีคุณสมบัติตำแหน่งใหม่ที่ช่วยให้คุณสามารถวางตำแหน่งองค์ประกอบที่สัมพันธ์กันได้ สำหรับเอกสารที่สมบูรณ์และการสาธิตดู: http://jqueryui.com/demos/position/#option-offset

วิธีหนึ่งในการวางตำแหน่งองค์ประกอบของคุณโดยใช้คุณสมบัติตำแหน่ง:

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

13
คำตอบนี้ได้รับการโหวตสองครั้งโดยไม่มีคำอธิบาย โปรดบอกว่าทำไมถ้าคุณลงคะแนนคำตอบของฉัน ขอบคุณ!
KSev

2
อาจเป็นเพราะคุณใช้ jQuery UI ในขณะที่ OP ถามเฉพาะ jQuery
เรือท้องแบน

7
บ่อยครั้งที่ผู้คนไปไกลเกินไปกับการโหวตลง อย่าคิดว่าคำตอบที่กว้างกว่านั้นไร้ประโยชน์สำหรับผู้อื่นแม้ว่าจะเป็นการขยาย OP ก็ตาม อย่าให้ฉันเริ่มต้นใน 'ปิดเพราะนี่ไม่ใช่คำถามที่เหมาะสม';)
ลงจอด

@KSev - ฉันมาจากอนาคต jQuery ยังไม่มี setter บน.position... ดู: api.jquery.com/position
Koshinae

@Koshinae เป็นส่วนหนึ่งของ jQuery "UI" ดูที่ลิงค์ด้านบนหรือลองjqueryui.com/position นอกจากนี้หากคุณใช้ jQuery คุณอาจต้องการพิจารณาใช้ angularJS 2.0 อย่างไรก็ตามฉันคาดว่าคุณจะยังคงรักษารหัสเดิมอยู่
KSev

16

ทำได้ แต่คุณต้องรู้ว่าการใช้การoffset()กำหนดตำแหน่งขององค์ประกอบที่สัมพันธ์กับเอกสาร:

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

0

นี่คือตัวเลือก นี่เป็นเพียงสำหรับพิกัด x

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

offset (). left และ css.left ไม่ใช่สิ่งเดียวกันอาจมีหรือไม่มีค่าเหมือนกันขึ้นอยู่กับโครงสร้างเพจ
Kalle

ฉัน +1 ดูเหมือนว่าจะทำงานได้ดีสำหรับฉันและโดยพื้นฐานแล้วมันก็เหมือนกับคำตอบที่ไม่ได้เลือกด้านล่างที่มี 85+ โหวต
Paul Nelson Baker

ทำงานให้ฉัน ขอบคุณสำหรับการสนับสนุน!
Erlend KH

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.