[HTML / JS] getelementbyid aidez moi !!!

getelementbyid aidez moi !!! [HTML / JS] - HTML/CSS - Programmation

Marsh Posté le 13-11-2002 à 15:06:25    

Salut,
j'aimerais obtenir tous les ID d'une page HTML avec du Javascript mais je ne sais pas comment faire ... peut être avec DOM ? ou ya t'il une solution plus facile et rapide ? j'aimerais par exemple que:
 
 

Code :
  1. <html>
  2. <body>
  3.   <div id="/1/">
  4.     <div id="/1/a">pouet</div>
  5.   </div>
  6.   <div id="/2/"></div>
  7. </body>
  8. </html>


la fonction ou quoique ce soit puisse me donner un tableau avec /1/ , /1/a , /2/ etc... !!! aidez moi silvous plait :( je galère je sais pas faire ça et c hyper urgent que j'y arrive :( merci :)

Reply

Marsh Posté le 13-11-2002 à 15:06:25   

Reply

Marsh Posté le 13-11-2002 à 15:11:41    

Commence déjà par corriger tes id :
 
http://www.w3.org/TR/html4/struct/global.html#adef-id

Citation :

This attribute assigns a name to an element. This name must be unique in a document.


Citation :

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-" ), underscores ("_" ), colons (":" ), and periods ("." ).


Message édité par gm_superstar le 13-11-2002 à 15:11:52

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 13-11-2002 à 15:17:14    

yaisse! bon merci pour le tuyau, ils seront toujours uniques mes ID pask'ils proviennent d'une base de données mais bon je coderai avec des '-' à la place des '/' mais sinon t'as pas une réponse pour balayer les ID ?

Reply

Marsh Posté le 13-11-2002 à 15:22:25    

Code :
  1. ids = new Array();
  2. elems = document.getElementsByTagName("div" );
  3. for(i=0;i<elems.length;i++)
  4. {
  5.   ids[i] = elems.id; //ou un truc du genre, a verifier
  6. )

Reply

Marsh Posté le 13-11-2002 à 15:29:37    

cool :) c une façon de le faire!
mais est-ce possible, d'une certain façon, de faire :
 
all_ids = new Array();
 
all_ids = document.getElementById() ;
 
sans préciser lequel et qu'il y mette TOUT ?

Reply

Marsh Posté le 13-11-2002 à 15:34:28    

ben c'est pas le but.
mais vu que tu dis que ces id viennent d'une base, pourquoi tu genererais pas le tableau en meme temps que la page  :??:

Reply

Marsh Posté le 13-11-2002 à 15:56:04    

k666 a écrit a écrit :

cool :) c une façon de le faire!
mais est-ce possible, d'une certain façon, de faire :
 
all_ids = new Array();
 
all_ids = document.getElementById() ;
 
sans préciser lequel et qu'il y mette TOUT ?



Non ça marche pas comme ça. Si tu veux récupérer tous les ids d'un élément particulier (DIV par exemple) dans ce cas la méthode de lorill est la bonne.
 
Si par contre tu as des ids sur tout un tas d'éléments différents ben il faut parcourir tout l'arbre DOM avec une chouette fonction récursive :)
 
 
Pour un élément donné :  
 - S'il a un attribut ID, le mettre dans le tableau.
 - S'il a des enfants :
   - Appeler la fonction pour chacun de ses enfants.
 
 
Mais il est clair que si les ids sont connus dans la base autant faire la requête qui va bien pour remplir dès le début le tableau JavaScript.


Message édité par gm_superstar le 13-11-2002 à 15:56:31

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 13-11-2002 à 16:04:21    

en fait j'essaye de changer dynamiquement la classe de mes éléments en fonction de certaines actions sur ceux ci, mais c'est controlé par un autre frame qui gère tout l'affichage ... maintenant je suis confronté à un ptit bug de IE je ne sais pas à quoi ça peut être du :( si vous pouvez m'aider ! j'ai deux exemples : un exemple dans lequel je change directement toutes les classes de mes trucs et un autre dans lequel j'alerte à chaque changement, le premier exemple me rend le tout transparent et c hyper chaint paske ça marche pas du coup :( par contre le deuxième, vu quia une alerte, je ne sais pourquoi il arrive à tout bien faire comme je lui ai dit ! si vous pouvez m'aider :) sur mozilla ça marche nickel mais pas sur IE et je sais pas quoi faire pour réparer ça: donc
 
1er exemple:

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <head>
  4.  <style>
  5.   .uninitialized {
  6.   }
  7.   .init {
  8.    position:absolute;
  9.    top:20px; left:20px;
  10.    display:block;
  11.    font-size:30;
  12.   }
  13.   .doss_lev1_out {
  14.    position:relative;
  15.    left:10px;
  16.    font-size:16;
  17.   }
  18.   .doss_lev2_out {
  19.    position:relative;
  20.    left:20px;
  21.    font-size:14;
  22.   }
  23.   .doss_lev3_out {
  24.    position:relative;
  25.    left:30px;
  26.    font-size:12;
  27.   }
  28.   .act_lev1_out {
  29.    position:relative;
  30.    left:15px;
  31.    font-size:16;
  32.   }
  33.   .act_lev2_out {
  34.    position:relative;
  35.    left:25px;
  36.    font-size:14;
  37.   }
  38.   .act_lev3_out {
  39.    position:relative;
  40.    left:35px;
  41.    font-size:12;
  42.   }
  43.  </style>
  44. </head>
  45. <body onload="javascript:comeon('/1057/');">
  46.  <script>
  47.   function scanAndSet(do_what)
  48.   {
  49.    ids = new Array();
  50.    elems = document.getElementsByTagName("div" );
  51.    for(i=0;i<elems.length;i++)
  52.    {
  53.     if (elems[i].id.indexOf(do_what) == 0)
  54.     {
  55.      tmp = elems[i].id.split("/" );
  56.      level = tmp.length - 2 ;
  57.      if ( tmp[tmp.length-1] == "" )
  58.      {
  59.       nclass = "doss_lev"+level+"_out";
  60.      // alert(nclass);
  61.       document.getElementById(elems[i].id).className = nclass;
  62.      }
  63.      else
  64.      {
  65.       document.getElementById(elems[i].id).className = "act_lev"+level+"_out";
  66.      }
  67.     }
  68.    }
  69.   }
  70.   function comeon(do_what)
  71.   {
  72.    document.getElementById(do_what).className = "init";
  73.    window.setTimeout('scanAndSet('+do_what+')','1000');
  74.   }
  75.  </script>
  76.  <div id="/1057/" class="uninitialized">
  77.   Test avec URLS bidon
  78.   <div  id="/1057/1058/">
  79.    (x)<A href="javascript:navgoto('/1057/1058');" color="blue">Sites</A>
  80.    <div id="/1057/1058/642">
  81.     (o)<A href="javascript:navgoto('/1057/1058/642');">Google site</A>
  82.    </div>
  83.    <div id="/1057/1058/641">
  84.     (o)<A href="javascript:navgoto('/1057/1058/641');">Forum hardware</A>
  85.    </div>
  86.    <div id="/1057/1058/643">
  87.     (o)<A href="javascript:navgoto('/1057/1058/643');">LeMonde</A>
  88.    </div>
  89.   </div>
  90.   <div id="/1057/1059/">
  91.    (x)<A href="javascript:navgoto('/1057/1059');">Images</A>
  92.    <div id="/1057/1059/644">
  93.     (o)<A href="javascript:navgoto('/1057/1059/644');">Doggy</A>
  94.    </div>
  95.    <div id="/1057/1059/649">
  96.     (o)<A href="javascript:navgoto('/1057/1059/649');">image sympa</A>
  97.    </div>
  98.    <div id="/1057/1059/650">
  99.     (o)<A href="javascript:navgoto('/1057/1059/650');">imageotte</A>
  100.    </div>
  101.   </div>
  102.  </div>
  103. </body>
  104. </html>


 
et deuxième exemple:
 

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <head>
  4.  <style>
  5.   .uninitialized {
  6.   }
  7.   .init {
  8.    position:absolute;
  9.    top:20px; left:20px;
  10.    display:block;
  11.    font-size:30;
  12.   }
  13.   .doss_lev1_out {
  14.    position:relative;
  15.    left:10px;
  16.    font-size:16;
  17.   }
  18.   .doss_lev2_out {
  19.    position:relative;
  20.    left:20px;
  21.    font-size:14;
  22.   }
  23.   .doss_lev3_out {
  24.    position:relative;
  25.    left:30px;
  26.    font-size:12;
  27.   }
  28.   .act_lev1_out {
  29.    position:relative;
  30.    left:15px;
  31.    font-size:16;
  32.   }
  33.   .act_lev2_out {
  34.    position:relative;
  35.    left:25px;
  36.    font-size:14;
  37.   }
  38.   .act_lev3_out {
  39.    position:relative;
  40.    left:35px;
  41.    font-size:12;
  42.   }
  43.  </style>
  44. </head>
  45. <body onload="javascript:comeon('/1057/');">
  46.  <script>
  47.   function scanAndSet(do_what)
  48.   {
  49.    ids = new Array();
  50.    elems = document.getElementsByTagName("div" );
  51.    for(i=0;i<elems.length;i++)
  52.    {
  53.     if (elems[i].id.indexOf(do_what) == 0)
  54.     {
  55.      tmp = elems[i].id.split("/" );
  56.      level = tmp.length - 2 ;
  57.      if ( tmp[tmp.length-1] == "" )
  58.      {
  59.       nclass = "doss_lev"+level+"_out";
  60.       alert(nclass);
  61.       document.getElementById(elems[i].id).className = nclass;
  62.      }
  63.      else
  64.      {
  65.       document.getElementById(elems[i].id).className = "act_lev"+level+"_out";
  66.      }
  67.     }
  68.    }
  69.   }
  70.   function comeon(do_what)
  71.   {
  72.    document.getElementById(do_what).className = "init";
  73.    window.setTimeout('scanAndSet('+do_what+')','1000');
  74.   }
  75.  </script>
  76.  <div id="/1057/" class="uninitialized">
  77.   Test avec URLS bidon
  78.   <div  id="/1057/1058/">
  79.    (x)<A href="javascript:navgoto('/1057/1058');" color="blue">Sites</A>
  80.    <div id="/1057/1058/642">
  81.     (o)<A href="javascript:navgoto('/1057/1058/642');">Google site</A>
  82.    </div>
  83.    <div id="/1057/1058/641">
  84.     (o)<A href="javascript:navgoto('/1057/1058/641');">Forum hardware</A>
  85.    </div>
  86.    <div id="/1057/1058/643">
  87.     (o)<A href="javascript:navgoto('/1057/1058/643');">LeMonde</A>
  88.    </div>
  89.   </div>
  90.   <div id="/1057/1059/">
  91.    (x)<A href="javascript:navgoto('/1057/1059');">Images</A>
  92.    <div id="/1057/1059/644">
  93.     (o)<A href="javascript:navgoto('/1057/1059/644');">Doggy</A>
  94.    </div>
  95.    <div id="/1057/1059/649">
  96.     (o)<A href="javascript:navgoto('/1057/1059/649');">image sympa</A>
  97.    </div>
  98.    <div id="/1057/1059/650">
  99.     (o)<A href="javascript:navgoto('/1057/1059/650');">imageotte</A>
  100.    </div>
  101.   </div>
  102.  </div>
  103. </body>
  104. </html>


 
merci d'avoir le courage de tester :) je ne sais pas pourquoi dans le premier exemple rien ne s'affiche ! :'(

Reply

Marsh Posté le 13-11-2002 à 16:28:14    

bon c plus facile peut être avec des liens :D
 
celle qui marche pas:
 
http://kpoman.dyndns.org/test_js_css.html
 
 
celle qui marche (que paskia une alert)
 
http://kpoman.dyndns.org/test_js_css2.html
 
 
voilà si vous pouviez m'aider siouplé :'( je pense que c un bug mais peut être que vous sauriez me dire ?

Reply

Marsh Posté le 13-11-2002 à 16:39:27    

Heu... quel est le but de ton JavaScript ? Juste appliquer un style particulier à un élément en fonction de son niveau dans l'arbre ?


Message édité par gm_superstar le 13-11-2002 à 16:40:00

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 13-11-2002 à 16:39:27   

Reply

Marsh Posté le 13-11-2002 à 17:00:26    

ouais en fait je dois gérer bcp d'états et de styles en fonction de plusieurs paramètres ... je génère d'abord via une bdd+xml+xsl une structure de DIVs avec des ID, puis après via une API que je suis entrain de faire je gère complètement l'affichage ... il faut donc créer une super feuille de style css de malades avec tous les cas possibles, du style:
 
.dossier_niveau1_mouseon_nonclickable {
 /* le style ici */
}
 
ou alors
 
.activite_niveau2_mouseout_clickable {
 /* le style ici */
}
 
 
etc...
 
je viens de me rendre compte que, dans mon premier lien, si on resize la page ça s'affiche du coup :( c bête :( du coup je sais pas comment faire :'(

Reply

Marsh Posté le 13-11-2002 à 17:11:29    

en fait on est entrain de réaliser une interface de navigation assez modulaire,
mais je galère avec ces styles et tout le bordel paske des fois ça passe pas, je crois que netscape a du mal pour positionner des div absolus ou relatifs ou un truc du genre ?

Reply

Marsh Posté le 13-11-2002 à 17:22:53    

Bon désolé j'ai pas le courage de me plonger dans ton truc, mais sache qu'il est possible d'associer plusieurs styles à un élément :
 
class="document niveau1 clickable"
 
tu as ensuite tes styles séparés :
 
.document {
 ...
}
 
.niveau1 {
 ...
}
 
.clickable {
 ...
}
 
div:hover {
 ...
}


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed