11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour.

J'ai un petit problème pour un petit script sous le site que je développe sous Magento (plateforme e-commerce).

Voici une partie de mon HTML :
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
</head>
<body class=" cms-index-index cms-home">
<div class="wrapper">
   <div class="bg-right">
      <div class="header">
         <div class="header-top-container">
         </div>
         <div class="header-nav-container">
            <div class="header-nav">
               <h4 class="no-display">Navigation dans la catégorie :</h4>
               <ul id="nav">
               </ul>
            </div>
         </div>
      </div>
      <div class="middle-container">
      </div>
      <div class="footer-container">
      </div>
   </div>
</div>
</body>
</html>


Ce que je souhaite faire est tout simplement d'agir sur le style de mes li contenu dans le ul avec id nav.

Je tente alors de récupérer mes li de cette manière :
var nav = document.getElementById('nav').getElementsByTagName('li');


Le problème c'est que le getElementById('nav') me renvoi null...

Bref là je suis vraiment perdu, et n'étant pas un expert en JS j'ai peut être l'impression que ça peut venir du JS déjà existant sous Magento.

Quelqu'un peut-il m'éclairer pour savoir pourquoi je ne peux pas récupérer mon ul ?

Merci d'avance !
Modifié par slake13 (05 Aug 2009 - 11:06)
Bonjour!

À quel moment et de quelle manière lances-tu ton script? Pour que l'élément puisse être trouvé par javascript, il faut attendre que toute la structure DOM de la page soit chargée avant de lancer le script. Les deux moyens les plus simples sont de faire dépendre le lancement de ton JS d'un onload sur ta page (via le gestionnaire d'événement qui-va-bien si tu charges plusieurs scripts: la manière exacte dépend de tout ce que tu souhaites charger), ou bien de placer tes scripts dans un élément script à la toute fin de ton code HTML.
Modifié par Gilles (05 Aug 2009 - 12:09)
Il faut voir aussi si le navigateur considère qu'un UL sans LI (comme dans le code que tu cites) est invalide, et supprimes le UL du DOM.
Florent V. a écrit :
Il faut voir aussi si le navigateur considère qu'un UL sans LI (comme dans le code que tu cites) est invalide, et supprimes le UL du DOM.


C'est à mon avis peu probable: le code est certes invalide au sens HTML, mais il est bien formé au sens XML et (de mémoire, mais je peux me tromper...) c'est tout ce qui importe pour la manipulation du DOM (que ce soit en (X)HTML ou toute mouture de XML).