2010-07-08 52 views
160

position()offset()之間的區別是什麼?我試圖做一個點擊事件如下:jQuery:位置()和偏移之間的差異()

console.info($(this).position(), $(this).offset()); 

他們似乎正好返回相同的......(點擊的元素是一個表格單元格中的表)

回答

194

這取決於元素是在什麼情況下position位置相對偏移父返回,並offset相對於文檔相同呢。顯然,如果文檔是偏移父項,通常情況下,這些將是相同的。

如果你有這樣一個佈局,但是:

<div style="position: absolute; top: 200; left: 200;"> 
    <div id="sub"></div> 
</div> 

然後offset將是200:200,但它的position將是0:0。

+2

所以抵消父母是位置設置爲絕對的第一個父母?要麼? – Svish 2010-07-08 09:48:54

+1

@Svish:哇,我真的錯過了代碼縮進?對於編輯。是的,抵消父母是最接近的*定位*父母。即位置設置爲絕對,相對或固定(但不是靜態)的元素。這不是一個jQuery,甚至不是一個JavaScript的東西,你有相同的行爲在CSS中:如果你要'sub'絕對定位到0:0,那麼它將在抵消父母的左上角。 – 2010-07-08 10:01:29

+0

太棒了,那完全有道理! (編輯沒問題,嘿嘿,我一直這樣做:p) – Svish 2010-07-08 10:13:05

27

.offset()方法允許我們檢索元素相對於文檔的當前位置。將其與.position()進行對比,其檢索當前位置相對於抵消父母。當爲了全局操作(特別是爲了實現拖放操作)而將新元素放置在現有元素的頂部時,.offset()更加有用。

來源:http://api.jquery.com/offset/

+3

如以上問什麼被視爲抵消父母?似乎在另一個div內的第一個div上調用position()並不總是返回0,0 - 即使沒有其他樣式或定位正在進行。 – Kokodoko 2014-06-23 13:49:14

+2

jquery.offsetParent():http://api.jquery.com/offsetparent/「獲取定位的最接近的祖先元素。」 – 2015-01-12 23:20:54

-7

這兩個函數都返回一個帶有兩個屬性的普通對象:寬度爲&高度。

offset()指相對於文檔的位置。

位置()是指相對於位置到它的父元素

但是當對象的CSS位置是「絕對」兩種功能將返回寬度= 0 &高度= 0

+5

糾錯:偏移量和位置返回帶有左側屬性和頂部屬性的對象,而不是寬度和高度。 – 2015-11-02 12:33:05

相關問題