JavaScript修改所有绝对定位元素

3

在JS中,我需要有效地将所有绝对定位的元素向下移动x像素。我需要循环遍历每个元素并尝试弄清楚它是否被绝对定位吗?还是有更好的方法?

谢谢, Mala

更新:具体而言:我正在使用一个书签脚本将JS注入到任何页面上 - 因此我不能以任何方式更改标记或实际的CSS文件。这个书签脚本应该将所有绝对定位的元素下移155像素,除了其他一些功能。


你的确切需求是什么? - rahul
请将以下与编程有关的内容从英语翻译成中文。 仅返回已翻译的文本:[更新问题以更具体] - Mala
4个回答

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';
  }
}

这个可行,谢谢!我只需要更改topOffset来使用getSyle获取顶部值,因为style.top在我测试的页面上(Google搜索结果)没有返回任何内容。 - Mala

2

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


1

Phoenix的解决方案,不使用JQuery:

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";
    }
}

0

有CSS语句position: fixed - 可能会实现你想要的效果...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接