2014-11-21 56 views
1

我想使用jQuery offset()函數來定位絕對定位的div。 這個想法是將它定位在DOM另一個元素的固定偏移處。這發生在具有多個嵌套div的相當複雜的環境中。當調用兩次jQuery偏移量(coords)不相干的行爲

發生的奇怪的事情是,調用它兩次會得到兩個不同的結果。對我來說,似乎沒有理由這樣做,雖然我在jQuery方面很新,所以我可能會忽略一些顯而易見的事情。

我認爲

var pos = $(document.getElementById(someElementInTheDOM)).offset(); 
$(document.getElementById(MyDiv)).offset(pos); 

應該在同一個地方總是定位MyDiv,即使我把這個代碼的一些10倍。這正是this fiddle中發生的情況。點擊放大鏡數次,一切正常。

但是,一旦我開始添加display:nonedisplay:block屬性,事情就會中斷。我試圖把它歸結爲基本的,我創建了一個小提琴here。要了解我的意思,請按放大鏡,再次點擊放大鏡,再次點擊放大鏡,用白色「X」關閉div,再次點擊放大鏡。

任何線索是怎麼回事?

+0

只是一個想法,因爲你已經在使用jQuery,你可能想看看[jQUery UI](http://jqueryui.com/themeroller/),你也有對話框覆蓋在那裏... – Banana 2014-11-21 11:12:30

+0

@Banana我會看看,謝謝。我只是覺得我應該在繼續學習之前正確地學習jQuery,這種奇怪的行爲讓我感到不舒服,因爲它讓我覺得我沒有把握 – dirluca 2014-11-21 11:21:48

+0

後面發生了什麼。嘗試使用jquery'position'而不是http:// api。 jquery.com/position/ – demo 2014-11-21 11:32:30

回答

2

你只需要改變這個順序:

document.getElementById("iuocboun_filter_window").style.display="block"; 
$(document.getElementById("iuocboun_filter_window")).offset(pos); 

,而不是

$(document.getElementById("iuocboun_filter_window")).offset(pos); 
document.getElementById("iuocboun_filter_window").style.display="block"; 

編輯:

說明:offset不上隱藏要素工作,這就是爲什麼你必須使其首先可見並設置偏移量。 ;)

+0

作品,而且我得到了原因。謝謝。順便說一下,你已經指出了我在API文檔中找到註釋。 – dirluca 2014-11-21 11:51:31