11548 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Salut tout le monde, Smiley smile

J'ai fais un "petit" script qui répertorie diverses informations afin d'aider l'utilisateur pour la navigation.
Celà regroupe, entre autres, une description des balises abbr, une liste des raccourcis ainsi qu'une liste des documents attachés (balises link).

Sous Firefox et Opera, pas de problème, tout fonctionne comme prévu.

Sous IE, j'ai déjà dû supprimer la description des balises abbr, celui-ci ne reconnaissant pas ces balises. Il ne dispose donc que de la liste des raccourcis et celle des documents attachés.

Le soucis, c'est lors de la constitution de mes fragments. Il ne respecte pas l'ordre dans lequel je dispose mes éléments. Je suis censé avoir un titre h3 suivi d'une liste descriptive dl pour chaque méthode (voir le résultat sous Firefox) mais sous IE, il m'insère la liste dl puis le titre de liste suivante. Après 7 ou 8 essais, je n'arrive pas à trouver d'où vient l'erreur.

Bref, y'a-t-il quelqu'un qui soit en mesure de me filer un petit coup de main ?

XHTML : page xhtml
JS : script
CSS : feuille de style

Dans le pire des cas, je simplifierais encore pour IE mais si je pouvais éviter, çà m'arrangerait grandement... Sont déjà pas gâtés les gens qui sont sur ce navigateur donc si quelqu'un peut faire un petit geste pour eux, ce serait gentil ! Smiley murf

Merci à vous. Smiley cligne
Modifié par koala64 (21 Jul 2006 - 16:15)
salut

en fait, je ne crois pas que cela soit un probleme d'ordre mais de positionnement. Sur IE, quand tu cliques sur Raccourcis, le titre h3 qui apparait sous la liste est le suivant (Documents)
Dans l'arbre DOM, ton h3 Raccourcis est bien situé avant tes dl
C'est peut etre au niveau de ta feuille CSS qu'il faut voir le souci ...

en tout cas, joli code

a+
Modérateur
Salut dunjl,

Tout d'abord merci de t'être plongé dans le code... Smiley cligne

En fait, la propriété css display est la seule gérée via le script du fait que c'est elle qui fait apparaître ou non mes éléments. Par conséquent, c'est forcémment dans le script que se trouve le problème. Lorsque je démarre ma méthode mNav.prototype.__prepa__(), j'initialise cette propriété en lui affectant la valeur none pour l'ensemble des éléments h3. Au clic sur un des liens (raccourcis, documents,...) cette valeur passe à block pour les éléments correspondants...

Actuellement, le soucis, c'est que si j'indique...

oH3 = document.getElementsByTagName('h3')[0];

..., sous IE, il me prend en réalité;

oH3 = document.getElementsByTagName('h3')[1];


Chaque élément h3 se rapporte à une méthode... Je ne suis pas dans une boucle, je le déclare explicitement pour chaque... C'est ce qui fait que je me pose cette question du pourquoi... J'ai beau chercher, je ne vois pas la raison de l'incrémentation de la valeur du tableau oH3... d'autant plus que sous les autres navigateurs, je n'ai pas ce problème... Smiley sweatdrop
D'accord, alors c'est peut etre lié au fait qu'à l'initialisation tu ne crées pas de h3 pour les abbr si le navigateur est IE

et donc à la ligne 275

if( this.lastChild.nodeValue == cNav.racc )
	{
		var oH3 = oNavig.getElementsByTagName(cNav.h3)[1],
			oCont = document.getElementById(cNav.racc);
	}

dans le cas où ce n'est pas IE, c'est ok oNavig.getElementsByTagName(cNav.h3)[1] correspond bien à "Raccourcis"

mais si c'est IE
oNavig.getElementsByTagName(cNav.h3)[1] correspond à "Document'

je crois Smiley cligne
en effet c'est bien ça

pour tester j'ai ajouté à la ligne 54

	UsOp: 'Opera',
	isIE: false
},


puis ligne 84

// Si ce n'est pas IE, on lance le glossaire des abréviations
	if( !isIE ) aide.__prepa__(d,cNav.body,cNav.abbr,cNav.gloss);
	else  cNav.isIE = true;



enfin dans la fonction __Display__


if( this.lastChild.nodeValue == cNav.racc )
	{
		if (!cNav.isIE) var oH3 = oNavig.getElementsByTagName(cNav.h3)[1],
			oCont = document.getElementById(cNav.racc);
		else
			var oH3 = oNavig.getElementsByTagName(cNav.h3)[0],
			oCont = document.getElementById(cNav.racc);
	}
	if( this.lastChild.nodeValue == cNav.liens + cNav.attach )
	{
		if (!cNav.isIE) var oH3 = oNavig.getElementsByTagName(cNav.h3)[2],
			oCont = document.getElementById(cNav.liens);
		else
			var oH3 = oNavig.getElementsByTagName(cNav.h3)[1],
			oCont = document.getElementById(cNav.liens);
	}


Ca fonctionne, mais ce n'est peut être pas la meileure manière de le faire
c'était surtout pour vérifier
Smiley cligne
Modérateur
Aaaah... oui, oui, oui ! Smiley ravi

Bien vu ! Merci beaucoup car je commençais à saturer à force... Smiley langue

J'étais justement en train de vérifier de mon côté avant de voir ton dernier post mais effectivement, tu m'as mis la puce à l'oreille, c'était bien çà... Smiley smile

Etant donné que ce script fera partie de mes publications sur Allhtml, je ne manquerais pas de t'y citer...

A ce propos, je n'en parle pas trop par ici, ne souhaitant pas réellement faire de pub, mais je pense malgré tout que j'ouvrirais un topic sur Alsa' pour soumettre ces publications à la critique... En attendant, je continue de poser quelques pierres à l'édifice car il y a pas mal de boulot et de nettoyage à faire...

Merci encore ! Smiley cligne