วิธีการหักล้างองค์ประกอบอย่างถูกต้อง? - jQuery


88

นี้น่าจะเป็นคำถามง่ายๆจริงๆ แต่ฉันจะไปเกี่ยวกับการได้รับสิทธิชดเชยขององค์ประกอบใน jQuery แล้ว?

ที่ฉันสามารถทำได้:

$("#whatever").offset().left;

และถูกต้อง

แต่ดูเหมือนว่า:

$("#whatever").offset().right 

ไม่ได้กำหนด

แล้วจะทำอย่างไรให้สำเร็จใน jQuery?

ขอบคุณ !!

คำตอบ:


163

อเล็กซ์แกรี่:

ตามที่ร้องขอนี่คือความคิดเห็นของฉันที่โพสต์เป็นคำตอบ:

var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

ขอบคุณสำหรับการให้ฉันรู้ว่า.

ในรหัสหลอกที่สามารถแสดงเป็น:

ค่าชดเชยที่เหมาะสมคือ:

ความกว้างของหน้าต่างMINUS
( ออฟเซ็ตด้านซ้ายขององค์ประกอบบวกกับความกว้างภายนอกขององค์ประกอบ)


สิ่งนี้ใช้ไม่ได้กับการแปลง CSS ออฟเซ็ตจะได้รับผลกระทบจากการแปลง แต่ outerWidth (และความกว้าง) จะไม่
โจนาธาน

2
นี่คือค่าชดเชยจากด้านขวาของหน้าต่าง สำหรับการชดเชยจากด้านซ้ายของหน้าต่างดู CDZ ของคำตอบ
Codebling

ขวาสุดขอบขององค์ประกอบที่สามารถพบได้มากขึ้น $whatever[0].getBoundingClientRect().right"กำเนิด" ซึ่งสัมพันธ์กับขอบด้านซ้ายของหน้าต่าง
pstanton

ขอบคุณเบรนดอน คำตอบที่เป็นประโยชน์

29
var $whatever        = $('#whatever');
var ending_right     = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

อ้างอิง: .outerWidth ()


1
ฉันคิดว่าจำเป็นต้องเพิ่มพวกเขาแล้วลบ 1 ถ้าความกว้างเป็น 2 ดังนั้นทางซ้ายคือ 10 และขวาไม่ใช่ที่ 12 แต่ 11
nonopolarity

31
นี่เป็นคำตอบที่ไม่ถูกต้อง ใน CSS "ซ้าย" หมายถึง "ออฟเซ็ตของจุดซ้ายสุดขององค์ประกอบจากด้านซ้ายของหน้าต่าง / พาเรนต์" และ "ขวา" หมายถึง "ออฟเซ็ตของจุดขวาสุดขององค์ประกอบจากด้านขวาของหน้าต่าง / พาเรนต์ ". ดังนั้นคำตอบที่ถูกต้องคือ:var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Brendon Crawford

5
@BrendonCrawford คุณควรย้ายความคิดเห็นนั้นไปเป็นคำตอบ
Gary

3
หมายเหตุถึงใครก็ตามที่เข้ามา - คำตอบด้านบนได้รับการแก้ไขเพื่อให้สอดคล้องกับความคิดเห็นของ Brendon
Chris Marasti-Georg

16

บางทีฉันอาจจะเข้าใจผิดในคำถามของคุณ แต่ค่าชดเชยควรจะให้ตัวแปร 2 ตัวคือแนวนอนและแนวตั้ง สิ่งนี้กำหนดตำแหน่งขององค์ประกอบ ดังนั้นสิ่งที่คุณกำลังมองหาคือ:

$("#whatever").offset().left

และ

$("#whatever").offset().top

หากคุณต้องการทราบว่าขอบเขตที่ถูกต้องขององค์ประกอบของคุณอยู่ที่ใดคุณควรใช้:

$("#whatever").offset().left + $("#whatever").outerWidth()

9

เพิ่มเติมจากสิ่งที่ Greg พูด:

$ ("# อะไรก็ได้"). offset (). left + $ ("# อะไรก็ได้"). outerWidth ()

รหัสนี้จะได้รับตำแหน่งที่ถูกต้องเทียบกับด้านซ้าย หากความตั้งใจที่จะได้รับตำแหน่งด้านขวาเทียบกับด้านขวา (เช่นเมื่อใช้rightคุณสมบัติCSS ) จำเป็นต้องเพิ่มโค้ดดังนี้:

$ ("# parent_container"). innerWidth () - ($ ("# อะไรก็ได้"). offset (). left + $ ("# อะไรก็ได้"). outerWidth ())

รหัสนี้มีประโยชน์ในภาพเคลื่อนไหวที่คุณต้องตั้งค่าด้านขวาเป็นจุดยึดคงที่เมื่อคุณไม่สามารถตั้งค่าrightคุณสมบัติใน CSS ได้ในตอนแรก


6

จริงๆแล้วสิ่งเหล่านี้ใช้ได้เฉพาะเมื่อไม่ได้เลื่อนหน้าต่างจากตำแหน่งบนซ้ายเลย
คุณต้องลบค่าการเลื่อนหน้าต่างเพื่อให้ได้ค่าชดเชยที่มีประโยชน์สำหรับการเปลี่ยนตำแหน่งองค์ประกอบเพื่อให้อยู่บนหน้า:

var offset = $('#whatever').offset();

offset.right = ($(window).width() + $(window).scrollLeft()) - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = ($(window).height() + $(window).scrollTop()) - (offset.top + $('#whatever').outerHeight(true));

5

เบรนดอนครอว์ฟอร์ดมีคำตอบที่ดีที่สุดที่นี่ (ในความคิดเห็น) ดังนั้นฉันจะย้ายไปเป็นคำตอบจนกว่าเขาจะทำ (และอาจขยายได้เล็กน้อย)

var offset = $('#whatever').offset();

offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true));

5

มี DOM API ดั้งเดิมที่สามารถทำได้ทันที - getBoundingClientRect:

document.querySelector("#whatever").getBoundingClientRect().right

2
แต่ getBoundingClientRect ส่งกลับโดยสัมพันธ์กับวิวพอร์ตที่ไม่สัมพันธ์กับเอกสารซึ่งเป็นสิ่งที่ offset () ให้
Sai Dubbaka

2

รับจุดยึดของ a div/table (left) = $("#whatever").offset().left;- ok!

การหาจุดยึดdiv/table (right)คุณสามารถใช้รหัสด้านล่าง

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