2009-08-17 54 views
3

有效地,我需要在JS中做的是將所有絕對定位的元素向下移動x個像素。我是否需要遍歷每個元素並試圖弄清楚它是否完全定位?或者,還有更好的方法?JavaScript修改所有絕對定位的元素

感謝, 麻辣

更新:具體:我使用的是書籤注入JS到任何頁面 - 因此,我不能以任何方式更改標記或實際的CSS文件。除此之外,這個小書籤應該將所有絕對定位的元素向下移動155個像素。

+0

什麼是您的具體要求是什麼? – rahul 2009-08-17 09:48:39

+0

你爲什麼想這樣做? – rahul 2009-08-17 09:49:44

+0

[更新的問題更具體] – Mala 2009-08-17 10:02:18

回答

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

這工作,謝謝!我只是不得不改變topOffset使用getSyle來獲得最高價值,因爲style.top沒有返回頁面上的任何東西我正在測試它(谷歌搜索結果) – Mala 2009-08-18 01:55:32

+0

@Mala啊,好的想法! :) – kangax 2009-08-18 04:12:06

0

還有就是CSS語句position: fixed - 也許你想要做什麼......

+0

怎麼樣ie6;) – redsquare 2009-08-17 09:54:50

2

你可以標記與特定的類名都絕對定位的元素和most browsers使用getElementsByClassName。除此之外,循環是唯一的選擇。

1

鳳凰的解決方案未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"; 
    } 
}