Avatar billede dennism Nybegynder
14. juni 2008 - 13:50 Der er 10 kommentarer og
1 løsning

JavaScript: multiple ID

Jeg er ved at opbygge en side, hvor jeg har en menu, hvor hvert menu-element har en submenu som skal komme frem, når man klikker på menu-elementet. Mine submenuer ligger i hver deres div:

<div id="leftmenuSub" style="display:none;">

ID'et bliver brugt til at få den rigtige style fra mit stylesheet. Mit problem er, at når jeg klikker på menu elementet, så vil jeg gerne have at alle submenuer, altså divs med id="leftmenuSub", får display=none så alle er skjule ingen man viser den pågældende submenu.
Jeg håbede derfor at getElementById('leftmenuSub') ville returnere et array med alle disse, men det ser ikke ud til at være tilfældet :(

Hvordan kan man løse dette?
Avatar billede w13 Novice
14. juni 2008 - 13:56 #1
Nej, og det skyldes, at man ikke må/kan give flere elementer samme ID. Et ID skal jo være unikt, og det er det ikke, hvis 10 elementer har det samme.

Du må nok bruge class i stedet.
Avatar billede erikjacobsen Ekspert
14. juni 2008 - 14:13 #2
Du kalder dem:
  <div id="leftmenuSub0" style="display:none;">
  <div id="leftmenuSub1" style="display:none;">
  ...
Så bruger du getElementsByTagName('div'), løber listen igennem, og gør noget ved dem der her en id, der starter med 'leftmenuSub'
Avatar billede erikjacobsen Ekspert
14. juni 2008 - 14:14 #3
Eller laver en løkke

  for (i=0;i<maxantallet;i++) {
    ....getElementById('leftmenuSub'+i)....
Avatar billede dennism Nybegynder
14. juni 2008 - 14:37 #4
Hvad gør jeg så i min CSS-fil?
Nu står der:
div#leftmenuSub

Men det vil leftmenuSub0 og leftmenuSub1 ikke matche på..
Avatar billede erikjacobsen Ekspert
14. juni 2008 - 15:01 #5
Selvfølgelig ikke. Derfor er "class" opfundet.
Avatar billede w13 Novice
14. juni 2008 - 15:17 #6
Derfor bør du bruge class.

Så kan du lave et array ved at bruge koden:

var aLeftmenuSub=[];
for(var i=0,im=document.getElementsByTagName("*");i<im.length;i++)if(im[i].className=="leftmenuSub")aLeftmenuSub.push(im[i]);

På den måde vil du ende med at have alle elementer med class="leftmenuSub" i array'et aLeftmenuSub!
Bemærk dog at ovenstående kode naturligvis først skal køres, når alle elementer på siden er genereret.
Avatar billede dennism Nybegynder
14. juni 2008 - 16:24 #7
I må gerne smide et svar, begge to.
Avatar billede erikjacobsen Ekspert
14. juni 2008 - 16:26 #8
Ingen point til mig, tak.
Avatar billede w13 Novice
14. juni 2008 - 16:39 #9
:)
Avatar billede dennism Nybegynder
14. juni 2008 - 17:25 #10
Tak for hjælpen
Avatar billede olebole Juniormester
14. juni 2008 - 18:46 #11
<ole>

- men du kan somregel lave en mere effektiv søgning. I stedet for at søge i hele dokumentet med:
    im=document.getElementsByTagName("*");

- så prøv at præcissere søgningen med f.eks:
    im=document.getElementById("menu").getElementsByTagName("*");

Her søger jeg kun mellem elementer, som ligger i elementet med ID'en 'menu'  =)

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester