3

实际上,我需要在 JS 中将所有绝对定位的元素向下移动 x 个像素。我是否需要遍历每个元素并尝试确定它是否绝对定位?或者,还有更好的方法?

谢谢,马拉

更新: 具体:我正在使用书签将 JS 注入任何页面 - 因此我无法以任何方式更改标记或实际的 css 文件。除其他外,此小书签应将所有绝对定位的元素向下移动 155 像素。

4

4 回答 4

2

您可以使用特定的类名标记所有绝对定位的元素,并getElementsByClassName大多数浏览器中使用。除此之外,循环是唯一的选择。

于 2009-08-17T09:54:44.180 回答
2

这样的事情应该这样做:

function getStyle(el, prop) {
  var doc = el.ownerDocument, view = doc.defaultView;
  if (view && view.getComputedStyle) {
    return view.getComputedStyle(el, '')[prop];
  }
  return el.currentStyle[prop];
}
var all = document.getElementsByTagName('*'), i = all.length;
while (i--) {
  var topOffset = parseInt(all[i].style.top, 10);
  if (getStyle(all[i], 'position') === 'absolute') {
    all[i].style.top = isNaN(topOffset) ? '155px' : (topOffset + 155) + 'px';
  }
}
于 2009-08-17T12:35:48.820 回答
1

phoenix 的非 JQuery-ifed 解决方案:

var nodes = document.getElementsByTagName("*");
node.foreach(function(n){ // can use foreach since this is FF only
    if(n.style.position=="absolute"){
        n.style.top += parseInt(n.style.top || 0, 10) +"px";
    }
}
于 2009-08-17T12:33:08.120 回答
0

有 CSS 声明position: fixed- 这可能会做你想要的......

于 2009-08-17T09:47:50.213 回答