2009-08-17 10 views
3

Effectivement ce que j'ai besoin de faire dans JS est de déplacer tous les éléments absolument positionnés vers le bas par x pixels. Ai-je besoin de parcourir chaque élément et d'essayer de savoir s'il est positionné de manière absolue? Ou y a-t-il un meilleur moyen?Javascript pour modifier tous les éléments absolument positionnés

Merci, Mala

Mise à jour: spécifique: J'utilise un bookmarklet pour injecter JS sur une page - donc je ne peux pas changer le balisage ou des fichiers CSS réels de quelque façon. Ce bookmarklet devrait, entre autres, déplacer tous les éléments absolument positionnés de 155 pixels vers le bas.

+0

Quelle est votre exigence exacte? – rahul

+0

Pourquoi voulez-vous faire cela? – rahul

+0

[a mis à jour la question pour être plus précis] – Mala

Répondre

2

Quelque chose comme ça devrait le faire:

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

Cela a fonctionné, merci! Je devais juste changer le topOffset pour utiliser getSyle pour obtenir la valeur maximale, car style.top ne retournait rien sur la page sur laquelle je le testais (résultats de recherche google) – Mala

+0

@Mala Ah oui, bonne réflexion! :) – kangax

0

Il y a la déclaration CSS position: fixed - qui pourrait faire ce que vous voulez ...

+0

qu'en est-il de ie6;) – redsquare

2

Vous pouvez marquer tous les éléments absolument positionnés avec un nom de classe spécifique et utiliser le getElementsByClassName dans most browsers. Autre que cela, la boucle est la seule option.

1

solution de phénix un 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"; 
    } 
}