Avatar billede hopeless Nybegynder
02. oktober 2004 - 13:05 Der er 10 kommentarer og
1 løsning

Taeller og løkke

Hej Exp.

Jeg har denne: 
e = document.getElementById("adresse").style;e.display=(e.display!='block')?'block':'none';

Jeg kunne godt tænke mig en løkke af en art som skal gentage ovenstående efter hvor mange elementer der er:

Jeg tæller fx op i min VB og finder 5 elementer tilhørende adresse:
de vil så blive kaldt og vist via id:
-adresse1
-adresse2
-adresse3
-adresse4
-adresse5

I mit script ville jeg så godt have 5 gentagelser af denne:
e = document.getElementById("adresse1").style;e.display=(e.display!='block')?'block':'none';
e = document.getElementById("adresse2").style;e.display=(e.display!='block')?'block':'none';
e = document.getElementById("adresse3").style;e.display=(e.display!='block')?'block':'none';
e = document.getElementById("adresse4").style;e.display=(e.display!='block')?'block':'none';
e = document.getElementById("adresse5").style;e.display=(e.display!='block')?'block':'none';


hvordan? hvis nogen ved.
Avatar billede roenving Novice
02. oktober 2004 - 13:45 #1
Skal du have skjult alle elementer, som har et id, som starter med adresse ?-)

for så er det nemmest at:

elms=document.getElementsByTagName('DIV');for(i=0;elms.length>i;i++){if(elms[i].id.indexOf('adresse')==0){e=elms[i].style;e.display=(e.display!='block')?'block':'none';}}

-- du kan også lige gå de konkrete elementer igennem med en kode à la:

for(i=1;6>i;i++){e = document.getElementById("adresse"+i).style;e.display=(e.display!='block')?'block':'none';}

-- men som du måske kan lugte, ville jeg selv vælge den første løsning, da den er mere robust, og kan tåle et vilkårligt antal, hvor den nederste skal ændres efter antallet !-)
Avatar billede hopeless Nybegynder
02. oktober 2004 - 14:00 #2
Hej Roenving,
tak for dit hurtige svar!
Yes, antallet vil varierer. Du får lige et link så du kan se hvad jeg vil.
http://www.verdensbedstedagtilbud.dk/virksomhedsmappe/NYsammenligning.asp

Målet er at alle felter i tabellen er tomme ved load, og man så via tabeltoppen kan tilvælge de punkter man vil se/sammenligne. (loades toppe pga sidebredden)

Jeg har været igennem getElementsByTagName, getElementsByName og getElementById, og fandt at Id er vejen for mig her.

Jeg kan nu godt lave det på min måde som jeg har startet, men som du vil kunne se i min kode, vil scriptet blive ulidelig langt.
Jeg smider lige ID på mine andre felter i tabellen, og ser så om jeg gennemskue dit eksempel.

Hvis du kan se en smartere måde at gøre det vil jeg blive meget glad for at hører det.

mvh
Hopeless
Avatar billede hopeless Nybegynder
02. oktober 2004 - 14:09 #3
Ok. Har lagt Id på alle mine felter, og afprøvet din model. Smukt smukt!

Så skal jeg lige lave den for de andre overskrifter også.

giver du et svar for point? :)
Avatar billede roenving Novice
02. oktober 2004 - 14:10 #4
Start med at sætte linjeskift og indrykninger ind:

elms=document.getElementsByTagName('DIV');
for(i=0;elms.length>i;i++){
  if(elms[i].id.indexOf('adresse')==0){
    e=elms[i].style;
    e.display=(e.display!='block')?'block':'none';
  }
}
Avatar billede roenving Novice
02. oktober 2004 - 14:11 #5
Velbekomme '-)
Avatar billede roenving Novice
02. oktober 2004 - 14:20 #6
-- og tak for point ;~}
Avatar billede hopeless Nybegynder
02. oktober 2004 - 14:36 #7
Det er mig som takker. :D
Roenving, hvis du lige tager et kik på siden igen og ser koden.
Jeg har gentaget funktionen for alle mine overskrifter, men er sikker på at jeg kan gøre det smartere ved at kalde een funktion via en variabel afhængig af rækken.
Istedet for:
function skjulAlleAldersgruppe(){
elms=document.getElementsByTagName('P');
for(i=0;elms.length>i;i++){
if(elms[i].id.indexOf('aldersgruppe')==0){
  e=elms[i].style;
  e.display=(e.display!='block')?'block':'none';
  }
}
}
function skjulAlleaabningstid(){
elms=document.getElementsByTagName('P');
for(i=0;elms.length>i;i++){
if(elms[i].id.indexOf('aabningstid')==0){
  e=elms[i].style;
  e.display=(e.display!='block')?'block':'none';
  }
}
}
.....osv osv
Kan jeg så ikke kalde dem via den samme funktion
skjulAlle(aldersgruppe);return false"
eller
skjulAlle(aabningstid);return false"

Hvordan vil sådan en funktion så se ud? :)

Og til sidst. Kan man lave en global funktion som åbner/lukker alle på en gang?
Avatar billede roenving Novice
02. oktober 2004 - 14:48 #8
function skjulKolonne(colid){
  elms=document.getElementsByTagName('P');
  for(i=0;elms.length>i;i++){
    if(elms[i].id.indexOf(colid)==0){
      e=elms[i].style;
      e.display=(e.display!='block')?'block':'none';
    }
  }
}

-- og vil det ikke være mere hensigtsmæssigt at skjule td'erne ?-)

-- kaldet bliver så:

skjulAlle('aldersgruppe');return false;

Bemærk gnyfferne, for det skal være en tekststreng !-)
Avatar billede hopeless Nybegynder
02. oktober 2004 - 15:04 #9
Lækkert. Dejligt at få trimmet koden.

Det med at skjule TD'erne var hvad jeg først gjorde, men da jeg godt ville beholde overskrifterne, rykkede rækkerne sig nedenunder så der kom rod i tabellen. (så hellere vise et tomt felt tænkte jeg) :))

super tak igen. u rule.

ps. hvis du havde et forslag til den globale vis/skjul alle funktion vil jeg gerne hører det. (du får self flere point hvis du mener det)
Jeg har prøvet at lave dette, men den "spejlvender" bare tabellen istedet for at enten vise alle, eller fjerne alle
Avatar billede roenving Novice
02. oktober 2004 - 15:11 #10
function showHideAll(action){
  var tabel = document.getElementById('minTabel');
  var tags = tabel.getElementsByTagName('P');
  for(i=0;tags.length>i;i++){
    tags[i].style.display = action;
  }
}

<a href="#" onclick="showHideAll('none');return false;">Gem alle</a>
<a href="#" onclick="showHideAll('block');return false;">Vis alle</a>
Avatar billede hopeless Nybegynder
02. oktober 2004 - 15:55 #11
selvfølgelig burde jeg jo sige til mig selv :)

Dejligt du har så godt styr på det!

Lukker og slukker herfra.
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