2013-04-10 87 views
0

我正在寫一些javascript代碼,將所有絕對定位的元素向下移動60像素(在我的代理上其他頁面頂部顯示的60像素高度div)。下面的代碼我現在所擁有的(大多是從另一個問題借來計算器):找到絕對位置的所有父元素

function getStyle(el, prop) 
{ 
    var doc = el.ownerDocument; 
    var view = doc.defaultView; 
    if (view && view.getComputedStyle) 
    { 
    return view.getComputedStyle(el, '')[prop]; 
    } 

    return el.currentStyle[prop]; 
} 

function runAfterLoad() 
{ 
    var all = document.getElementsByTagName('*'); 
    var i = all.length; 
    while (i--) 
    { 
    var topOffset = parseInt(all[i].offsetTop, 10); 
    if (getStyle(all[i], 'position') === 'absolute') 
    { 
     all[i].style.top = isNaN(topOffset) ? '60px' : (topOffset + 60) + 'px'; 
    } 
    } 
} 

不幸的是這將所有絕對定位的元素下來60個像素。事實證明,我發現絕對定位在瀏覽器窗口中並不是絕對的,但絕對是符合某些特定規則的父級。下面是另一個答案報價就在這裏:

這工作,因爲「位置:絕對」是指像「使用上,右,下,左」自己關於誰擁有「的位置最近的祖先定位:絕對「或」位置:相對「。」

因此,我正在尋找如何調整我的當前代碼以僅查找絕對位置沒有父母的絕對位置的元素或相對定位。任何幫助,高度讚賞。

+0

每個_HTMLElement_都有一個[''offsetParent'](https://developer.mozilla.org/en-US/docs/DOM/element.offsetParent)屬性,它告訴你哪個_Node_被用作該元素的引用位置。 – 2013-04-10 20:20:44

回答

0

另一種選擇將是使用這個事實,如果你的優勢。如果y ou將整個頁面打包在一個div中,您完全(或相對)使用top: 60px進行定位時,您基本上會將整個頁面一次性向下移動60px

這也會移動非絕對元素。如果不需要,那麼這將不起作用。

相關問題