jQuery e bug nella funzione position()

In uno dei miei ultimi lavori, ho riscontrato un bug con l’utilizzo del framework jQuery, nella realizzazione di una galleria fotografica con effetto di scorrimento delle foto (slideshow photo gallery).
Ho perso diverse ore prima di capire che l’errore era dato dalla funzione jQuery position(), perché si verifica solo in determinate condizioni, ancora non del tutto chiare (forse dovute anche alla struttura della pagina HTML).

Il problema si presenta, come solito, con l’accoppiata Windows/Internet Explorer e più precisamente:
– in Windows Vista con IE7 e IE8
– in Windows XP con IE7

Stranamente Internet Explorer 6 ne è esente ed anche IE8 sotto windows XP.

In breve, la funzione jQuery position() applicata ad un DIV a cui è associato uno stile inline del tipo style=”left: -200px”, invece di restituire -200 pixel, da -199 pixel. 1 pixel di differenza. Questo pixel, nel mio caso, compromette lo slide delle foto.

Solo dopo vari tentativi ho capito che l’errore era dato dalla funzione e l’ho aggirato utilizzando le funzioni standard di javascript:

// Soluzione con jQuery, ma con bug
var position = $("#Div").position();
vat x = position.left;
// x errato
// Soluzione standard, esente dal bug
var x = document.getElementById('Div').style.left;