2013-04-10 60 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

这也会移动非绝对元素。如果不需要,那么这将不起作用。

相关问题