Javascript per modificare tutti gli elementi posizionati in modo assoluto
-
18-09-2019 - |
Domanda
Effettivamente quello che devo fare in JS è spostare tutti gli elementi posizionati in modo assoluto dalla x pixel. Ho bisogno di un ciclo tra ogni elemento e cercare di capire se è posizionato assolutamente? O c'è un modo migliore?
Grazie, Mala
Aggiornamento: specifica : Sto usando un bookmarklet per iniettare JS su qualsiasi pagina - quindi non posso modificare i file di markup o CSS effettivo in alcun modo. Questo bookmarklet dovrebbe, tra le altre cose, spostare tutti gli elementi posizionati in modo assoluto di 155 pixel verso il basso.
Soluzione
Qualcosa del genere dovrebbe farlo:
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';
}
}
Altri suggerimenti
Si potrebbe contrassegnare tutti gli elementi posizionati in modo assoluto con un nome di classe specifica e utilizzare il getElementsByClassName
in maggior parte dei browser . Oltre a questo, il ciclo è l'unica opzione.
soluzione delle Nazioni Unite di 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";
}
}
C'è la position: fixed
dichiarazione CSS - che potrebbe fare quello che vuoi ...