OVH Cloud OVH Cloud

offsetParent sur FireFox

11 réponses
Avatar
Etienne SOBOLE
salut.
desolé de poser 15.000 questions, mais bon...

j'utilise offsetParent pour remonter jusqu'au body depuis un objet...
un truc genre

var parent = obj.offsetParent;
while (parent)
{
alert(parent.nodeName);
parent = parent.offsetParent;
}

pour faire simple l'objet qui declanche cette fonction est la balise A situé
ici
<body><div><table><tr><td><a></td></tr></table></div></body>

et bien les alerte me donnent
le TD, le TABLE et le BODY,
mais ni les TR ni les DIV...

sous IE ca marche bien,
mais sous firefox non !

quelqu'un peut me dire pourquoi, et si c'est pas moi qui fait une connerie
???
merci
Etienne

10 réponses

1 2
Avatar
Etienne SOBOLE
Bon je ferai mieux de faire gaffe avant d'ecrire.

la seule différence c'est que IE passe par les DIV alors que FireFox non...
sinon aucune des deux ne passe par TR, FORM, TBODY et d'autre...

pour passer partout faut utiliser parentNode, mais ca resoud pas mon
problème...

voila...
ben c'est pas cool.
Etienne
Avatar
YD
j'utilise offsetParent pour remonter jusqu'au body depuis un objet...

var parent = obj.offsetParent;
while (parent)
{
alert(parent.nodeName);
parent = parent.offsetParent;
}
et bien les alerte me donnent
le TD, le TABLE et le BODY,
mais ni les TR ni les DIV...

sous IE ca marche bien,
mais sous firefox non !


Le comportement que tu signales est celui de FF, donc ?

quelqu'un peut me dire pourquoi, et si c'est pas moi qui fait une connerie


Tu utilises offsetParent alors que tu attends le comportement de parentNode !
Ces deux propriétés sont différentes : offsetParent renvoie le plus proche
élément ancêtre *positionné* (donc pas de TR ni de DIV si celui-ci est dans
le flux normal je pense).

(cf. le Gecko DOM Reference, à rechercher sur le site Mozilla)

--
Y.D.

Avatar
Thibault TAILLANDIER
Bon je ferai mieux de faire gaffe avant d'ecrire.

la seule différence c'est que IE passe par les DIV alors que FireFox non...
sinon aucune des deux ne passe par TR, FORM, TBODY et d'autre...

pour passer partout faut utiliser parentNode, mais ca resoud pas mon
problème...

voila...
ben c'est pas cool.
Etienne




Salut,
Faudrait p'tet nous exposer ton probleme alors ...
Si le but final est toujours d'arriver au body, pourquoi ne pas mettre
un id sur body, et l'appeler directement ?
Si le but final est de compter la profondeur d'élément, utiliser parentNode.

Bye
--
Thibault

Avatar
Etienne SOBOLE
Pour thibault et YD

Tu utilises offsetParent alors que tu attends le comportement de
parentNode !
Ces deux propriétés sont différentes : offsetParent renvoie le plus proche
élément ancêtre *positionné* (donc pas de TR ni de DIV si celui-ci est
dans
le flux normal je pense).


ok. effectivement je viens de le comprendre...
la différence vient donc du DIV qui est parcouru sous IE mais pas firefox

et fait, j'utilise cette fonction pour retrouver la position absolue d'un
objet...
la fonction total est la suivante

function getAbsoluteOffset(obj)
{
var coord = new Array();
var parent = obj.offsetParent;

coord[0] = obj.offsetLeft;
coord[1] = obj.offsetTop;
while (parent)
{
coord[0] += parent.offsetLeft;
coord[1] += parent.offsetTop;
if (parent.nodeName == 'DIV')
coord[1] -= parent.scrollTop;
parent = parent.offsetParent;
}
return coord;
}

voila ce qui marche sous IE meme si j'ai un div avec un ascenseur
mais sous firefox. point de salut.
ca ne marche pas.

donc ou puisje trouver la liste des tag parcouru par offsetParent afin que
je recode une fonction qui marche aussi sous firefox ?
merci...

Avatar
Etienne SOBOLE
Faudrait p'tet nous exposer ton probleme alors ...
Si le but final est toujours d'arriver au body, pourquoi ne pas mettre un
id sur body, et l'appeler directement ?
Si le but final est de compter la profondeur d'élément, utiliser
parentNode.


j'ai fait une réponse groupé deux ligne plus bas ;)
Etienne

Avatar
YD
la différence vient donc du DIV qui est parcouru sous IE mais pas firefox

et fait, j'utilise cette fonction pour retrouver la position absolue d'un
objet...
la fonction total est la suivante

function getAbsoluteOffset(obj)
{
[...]
}

voila ce qui marche sous IE meme si j'ai un div avec un ascenseur
mais sous firefox. point de salut.
ca ne marche pas.

donc ou puisje trouver la liste des tag parcouru par offsetParent afin que
je recode une fonction qui marche aussi sous firefox ?


Jette un coup d'oeil chez http://www.quirksmode.org/, il y a une rubrique
Javascript > positioning qui traite du offsetParent dans les différents
navigateurs...

--
Y.D.

Avatar
Etienne SOBOLE
Jette un coup d'oeil chez http://www.quirksmode.org/, il y a une rubrique
Javascript > positioning qui traite du offsetParent dans les différents
navigateurs...


Ouaip je connais ce site.
pour etre franc, je travaille sur mon projet depuis maintenant 18 mois et
modifier le doctype ne va pas être possible ;)

non l'idée c'est d'utiliser parentNode a la place de offetParent et de
tester le nodeName pour ne concerver que les
TD, TABLE, DIV et BODY...

en espérant que je n'oublie rien...

Etienne

Avatar
ASM

Pour thibault et YD

Tu utilises offsetParent alors que tu attends le comportement de
parentNode !
Ces deux propriétés sont différentes : offsetParent renvoie le plus proche
élément ancêtre *positionné* (donc pas de TR ni de DIV si celui-ci est
dans le flux normal je pense).


ok. effectivement je viens de le comprendre...
la différence vient donc du DIV qui est parcouru sous IE mais pas firefox

et fait, j'utilise cette fonction pour retrouver la position absolue d'un
objet...


Il n'y a donc pas de lézard puique (à ce que j'ai compris)
justement : ces DIVs ne sont pas positionnés.
Ne reste plus qu'à les mettre en 'relative' ?

la fonction total est la suivante

function getAbsoluteOffset(obj)
{
var coord = new Array();
var parent = obj.offsetParent;

coord[0] = obj.offsetLeft;
coord[1] = obj.offsetTop;
while (parent)
{
coord[0] += parent.offsetLeft;
coord[1] += parent.offsetTop;
if (parent.nodeName == 'DIV')
coord[1] -= parent.scrollTop;
parent = parent.offsetParent;
}
return coord;
}

voila ce qui marche sous IE meme si j'ai un div avec un ascenseur
mais sous firefox. point de salut.
ca ne marche pas.

donc ou puisje trouver la liste des tag parcouru par offsetParent afin que
je recode une fonction qui marche aussi sous firefox ?


et truc = document.getElementsByTagName('DIV');
ne te va pas ?

bon ! ici ils ne me parlent pas de scrollTop
http://www.quirksmode.org/viewport/compatibility.html
Mais ici ce m'a l'air d'être ton sujet :
http://www.quirksmode.org/js/findpos.html

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
Etienne SOBOLE
Mais ici ce m'a l'air d'être ton sujet :
http://www.quirksmode.org/js/findpos.html


Ben ouai mais c'est garanti que ca ne marche pas leur truc.

ca marche tant que tu n'as pas de div avec un scroll c'est bon...
apres c'est fichu...

La preuve en est que c'est tres proche de mon script...
et que mon script ne marche point.

Etienne

Avatar
ASM

Mais ici ce m'a l'air d'être ton sujet :
http://www.quirksmode.org/js/findpos.html


ca marche tant que tu n'as pas de div avec un scroll c'est bon...
apres c'est fichu...


Ben oui, et ils t'avaient bien prévenu.

"The script doesn't work when the offsetParent has an overflow of anything but visible.
Most browsers take the initial position of the element
(where it was when the layer wasn't yet scrolled)
as the true position, even if the layer has been scrolled."

et ta soluce IE seul :

"The only exceptions are Explorer 5 on Mac and Opera 7,
there the script works fine on an overflowing DIV.
A reader suggested reading out scrollLeft/Top properties
and adding them to the calculated position."

et peut-être la suite
car avec toutes les exceptions et originalités
on finit par se demander si çà marche qque part ;-/

L'exemple donné semble fonctionner chez moi



--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


1 2