2012-07-04 46 views
16

Tôi muốn biết cách lấy khoảng cách/offset/vị trí của một phần tử liên quan đến phần tử gốc của nó.Lấy khoảng cách của phần tử liên quan đến phần tử gốc của nó

Không giống như chức năng position() jQuery, mà có được là vị trí tương đối với cha mẹ của bù đắp vị trí, tôi cần phải nhận được (giả sử) ổn định vị trí của một nguyên tố vì nó là khoảng cách từ đỉnh của phần tử chứa/mẹ.

dụ:

<div id="parent"> 
    <div id="pos1">Has a position of 0px from top of containing parent el.</div> 
    <br style="height:20px;"> 
    <br style="height:20px;"> 
    <div id="pos2">Has a position of 40px from top of containing parent el.</div> 
</div> 

Vì vậy, không có vấn đề gì vị trí của các yếu tố phụ huynh đến các tài liệu, vị trí của pos1pos2 sẽ được báo cáo như nhau, vì họ không thay đổi so với cha mẹ element ...

Điều này có khả thi không?

Trả lời

37

này nên làm điều đó:

$('#pos1').offset().top - $('#pos1').parent().offset().top - $('#pos1').parent().scrollTop() 
+0

Công trình; nhưng điều gì đó kỳ lạ đang xảy ra với mã gốc ban đầu của tôi: bù trừ con luôn thay đổi tùy thuộc vào vị trí cuộn của phần tử gốc (có chiều cao cố định, nhỏ hơn chiều cao kết hợp của các phần tử con). –

+2

@VictorS Tôi thấy, hãy thử thay đổi phương thức offset() cho phương thức position() – daniloquio

+0

Chính xác! Và đó là lý do tại sao tôi hỏi câu hỏi, vì '.position()' cũng thay đổi giá trị của nó cho phần tử con phụ thuộc vào vị trí của nó trong phần tử cha được cuộn! WTF! –

0

Parent.offset() - child.offset()?

Sử dụng jQuery bù đắp()

+0

nếu trẻ em đến sau cha mẹ (theo vị trí dọc) thì đó là Child.offset() - Parent.offset() phải không? –

+0

Có bạn đúng, chỉ cần lấy ý tưởng lấy cả hai liên quan đến tài liệu. – sabithpocker

5

Mã này làm việc cho tôi.

var child_top = $("#parent_div").scrollTop() + $("#child_div").offset().top 
Các vấn đề liên quan