11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai deux div, un que jaffiche et lautre non :


<div id="petit" name="desc_court" class="montre">
      <h1>.... des trucs ....</h1>  
      <a onClick="switch_aff('1')">affiche long</a>
</div>
<div id="grand" name="desc_long" class="cache">
      <h1>.... plus de trucs ....</h1>
      <a onClick="switch_aff('1')">affiche court</a>
</div>


J'ai un css qui defini se que l'on affiche:


*.cache {
	display: none;
}

*.montre {
	display: block; 
}


et une fonction en javascript ki passe d'un a lautre :



function switch_aff(id) {	
if(document.getElementsByName("desc_court")[id-1].className=="montre" )
	{ 
		document.getElementsByName("desc_court")[id-1].className="cache";
		document.getElementsByName("desc_long")[id-1].className="montre";
	}
	
	else	
	{
		document.getElementsByName("desc_court")[id-1].className="montre";
		document.getElementsByName("desc_long")[id-1].className="cache";
	}			
}


voila donc tout ca marche très bien sous FireFox 1.5 mais pas sous Opera et je crois bien que ca doit merder sous IE6 aussi ...

quand je fait un alert de document.getElementsByName("desc_long") Opera dit que c'est un Object NodeList mais ce NodeList ne contient rien ... (length = 0) ...


J'ai essayé de recupéré le nom d'un de mes objets en faisant document.getElementsByTagName("div").Name mais il est undefined


Esque Opera connait bien les noms de mes objets ?

j'en ai raz le cul de devoir toujours adapter mon code à tous les navigateurs ... j'dois pas etre le seul !!
Modifié par JahWarrior (10 Jan 2006 - 21:48)
Dans ton cas, c'est getElementById qu'il faut utiliser et non pas getElementsByName. Si tu testes avec IE, c'est normal que ça marche quand même, parce qu'IE est sympa avec le js.
En faite jaffiche une liste de plusieurs centaines de références, avec une description court et long a chaque fois.

Vu que ca marche nikel avec FF je cherche une solution simple en gardant mes nom et mes id.

Si je veux adopter ta solution, je doit avoir un id différent pour chaque référence (je sais tu va me dire que c'est le principe des id mais bon ...) vu que getElementById[x] ne marche pas ... (logique vu que id est normalement unique ...)
D'ou l'utilisation du getElementsByName ...

J'utilise cette methode parceque pour positionner mes div petit et grand j'utilise leurs id et si chaque ref à un autre id ca marche plus ...

J'ai quand même essayé d'adapter ta solution en foutant le css des id petit et grand dans deux class, en affectant un id unique a chaque ref mais la mise en forme merde donc j'ai meme pas essayé le js ...

Si quelqu'un peut me dire comment l'utilisation de getElementsByName est possible avec Opera ca me faciliterai franchement le travail ! Merci Smiley cligne
Jai resolu le probleme en utilisant des getElementById, c'est plus compliqué mais ca marche alors

Je sais toujours pas si c'est faisable avec un getElementsByName mais bon ...

Merci à toi QuentinC, en passant j'aime bien ton site Smiley cligne
JahWarrior a écrit :

Merci à toi QuentinC, en passant j'aime bien ton site Smiley cligne


Merci pour la remarque. Si tu as un avis à propos de mon site, tu peux faire tes commentaires dans ce topic.