offsetParent 算法分析
當(dāng)調(diào)用元素 A 的 offsetParent 屬性時,必須按以下算法返回元素。
以下任一條件為真時,返回 null,并停止本算法。
A 是根元素。
A 是 HTML 的 body 元素。
元素 A 的 position 屬性計(jì)算值是 fixed。注 1
如果 A 是 HTML 元素 area,并且在其上級元素鏈中有 HTML 元素 map,返回上級元素鏈中距 A 最近的 HTML 元素 map,并停止本算法。注 2
如果以下任一條件為真時,返回距 A 最近的符合下述條件的上級元素,并停止本算法。
上級元素的 position 屬性計(jì)算值不是 static。注 3
上級元素是 HTML 的 body 元素。注 4
A 的 position 屬性計(jì)算值是 static,上級元素是 td、th 或 table。
返回 null。
前面已經(jīng)提到,以上是工作草案的內(nèi)容,所以與現(xiàn)行的瀏覽器不一定一致,注釋如下:
注 1 Firefox 不適用;IE 6 不適用;DOCTYPE 使 IE 7 不支持 fixed 時不適用(以下簡稱 IE 6 模式)。
注 2 Firefox 不適用。
注 3 上級元素的 position 屬性計(jì)算值是 fixed,并且 IE 6 或者 IE 6 模式不適用。
注 4 IE 7 模式中,如果元素的 position 屬性計(jì)算值是 absolute 或 relative,返回元素 HTML,而不是 BODY。
總結(jié)
由此看出,獲得 offsetParent 在各個瀏覽器中,各個瀏覽器的各個版本中,同一版本的不同模式中,都有不同的算法,實(shí)在有些麻煩。所以還是建議將其理解為通過 offsetParent 循環(huán)和 offsetLeft、offsetTop 可以獲得控件在瀏覽器中的絕對位置即可。
但慶幸的是有一種常見布局在各種瀏覽器中 offsetParent 是一樣的,那就是:外層元素 div 的 position 計(jì)算值是 relative、absolute 時,內(nèi)層元素 div 的 offsetParent 總是外層元素 div。
相關(guān)文章
document.all的一個比較完整的總結(jié)及案例
document.all想必學(xué)習(xí)javascript的同學(xué)們都很了解吧,本文主要是針對一些剛?cè)腴T的童鞋們做一下有關(guān)document.all的相關(guān)總結(jié),感興趣的朋友可以了解下,或許本文對你有所幫助2013-01-01基于JavaScript實(shí)現(xiàn)繼承機(jī)制之構(gòu)造函數(shù)方法對象冒充的使用詳解
我們知道JavaScript是面向?qū)ο蟮哪_本語言,那么既然是面向?qū)ο螅^承一定是必不可少的了。JavaScript的核心是ECMAScript,JavaScript繼承機(jī)制的實(shí)現(xiàn)其實(shí)就是ECMAScript繼承機(jī)制的實(shí)現(xiàn)2013-05-05簡述JavaScript對傳統(tǒng)文檔對象模型的支持
這篇文章主要介紹了簡述JavaScript對傳統(tǒng)文檔對象模型的支持,是JS學(xué)習(xí)進(jìn)階中的重要知識,需要的朋友可以參考下2015-06-06