調用jQuery.position()方法會返回相對於父元素的位置,jQuery官方文檔中描述說,它跟.offset()方法不一樣,.offset()返回的是相對於document的位置,而.position()返回的是相對於父元素的位置。
但事實上,在使用的過程中,我們發現.position()返回的值經常是0。但事實不是0。尤其是谷歌浏覽器和IE浏覽器裡。火狐浏覽器沒有此問題。
究其原因,以基於Webkit的浏覽器(谷歌浏覽器和Safari浏覽器)為例,只有當元素(圖片、flash等)完全加載後,浏覽器才能訪問到這些元素的高度和寬度,而火狐浏覽器是在DOM加載完成後就能訪問這些屬性,它不需要知道這個元素的完整尺寸。而谷歌浏覽器就不行。因此在谷歌/IE這樣的浏覽器裡,如果你想使用.position()獲取元素的偏移量,往往得到值就是初始值:0。
有一種補救的方法是將你的.position()調用放到 $(window).load()事件觸發之後,而不是$(document).ready事件之後。但這種方法也未必可靠。
另外一種變通的方法是用.offset()來換算:
代碼如下:
jQuery.fn.aPosition = function() {
thisLeft = this.offset().left;
thisTop = this.offset().top;
thisParent = this.parent();
parentLeft = thisParent.offset().left;
parentTop = thisParent.offset().top;
return {
left: thisLeft-parentLeft,
top: thisTop-parentTop
};
};
這雖然產生了多余的代碼,但比較可靠的多,用的讓人放心。