Newsgroup: it.comp.lang.javascript
Titolo: calcolo offsetleft ed offsettop ie

salve,
in una pagina ho la necessità di calcolare lo scostamento da sinistra
e dall'alto di un div.
la composizione della pagina è abbastanza complessa, ovvero ci sono
vari div sia innastati che affiancati con la proprietà float, con
bordo e non.
il problema è venuto fuori quando vado a calcolare i vari offset
(offsetleft ed offsettop) in internet explorer in quanto, a differenza
di altri browser vengono calcolati relativamente alla posizione
dell'oggetto in questione con il suo parent.
quello che ho riscontrato, dopo aver utilizzato un algoritmo che
calcolava ricorsivamente la distanza tra padre e filgio, è che ie nn
tiene conto dei bordi (o almeno credo) e cmq sbaglia qualcosa nel
calcolo.
infine la mia domanda dovrebbe essere ovvia: come posso fare per
calcolare tale distanza in modo preciso senza errori?
ringrazio anticipatamente per le eventuali risposte.

matraven ha scritto:

E' probabile che IE non tenga conto dei bordi.
Ad ogni modo ti consiglierei ogni volta di verificare la dimensione dei
bordi.
leftWidth = document.getElementById(idDiv).style.borderLeftWidth;
topWidth = document.getElementById(idDiv).style.borderTopWidth;
rightWidth = document.getElementById(idDiv).style.borderRightWidth;
bottomWidth = document.getElementById(idDiv).style.borderBottomWidth;
Occhio che e' probabile che ti escano valori con tanto di unita' di
misura (cm, em, px).
Quindi ai vari offsetLeft e offsetTop che trovi aggiungi il relativo
width del bordo.
Nell'algoritmo del padre... (tanto m'hai capito), occhio al padding.
Per il resto...
Una domanda perche' non utilizzi div con lo style "position:absolute"
cosi' la posizione e' relativa alla pagina!
E' piu' semplice!!!
Himgi



ciao e grazie per la risposta, appena ho un po' di tempo provo quello
che mi hai detto e poi ti faccio sapere.
come mai mi hai detto di fare attenzione anche al padding del padre?
dici che ie nn tiene conto nemmeno del padding?
ho un'ultima domanda: che cosa è di preciso
'document.getElementById(idDiv).style.clientLeft' e 
'document.getElementById(idDiv).style.clientTop' in ie? (dico in ie
perchè è l'unico browser che l'utilizza, o almeno credo)
cmq per quanto riguarda la tua domanda, nn posso usare 'position:
absolute' perchè i div di cui devo andare poi a calcolarne la
posizione, vengono creati dinamicamente da una pag php.
grazie ancora.

un'altra domanda:
ho seguito il tuo consiglio di utilizzare 'obj.style.borderleftwidth':
ho creato una pagina a parte complicandola man mano fino ad avere div
dentro altri, float, margin, padding e cose di ogni tipo o quasi e
funziona tutto quanto (o almeno nei casi in cui ho testato
l'algoritmo).
il fatto strano è che se vado ad inserire
'alert(obj.style.borderleftwidth)' all'interno della pagina che mi
interessa, l'alert mi restituisce una stringa vuota.
questo è molto strano in quanto l'oggetto in cui vado a verificare lo
spessore del bordo esiste ed ha la proprietà settata, inoltre anche se
vado a puntarlo direttamente con
'alert(document.getElementById("obj").style.borderleftwidth)' mi
ritorna cmq una stringa vuota.
volevo chiederti se tu potevi saperne il motivo o se ti era già
capitato altre volte.
sto impazzendo per sta cosa..ho provato di tutto!
grazie.