Avatar billede dotcom1 Nybegynder
18. august 2009 - 12:44 Der er 15 kommentarer og
1 løsning

Toggle div - expand/collapse all

Hej.

Jeg bruger dette script til at vise/skjule en div:

<script type="text/javascript">
<!--
    function toggle_visibility(id) {
      var e = document.getElementById(id);
      if(e.style.display == 'block')
          e.style.display = 'none';
      else
          e.style.display = 'block';
    }
//-->
</script>

<a href="#" onclick="toggle_visibility('minDiv');return false;">Læs mere</a>.
<div id="minDiv" style="display:none;">Indhold</div>

Det fungerer glimrende, og jeg har en side med en hel række af disse divs.

Mit spørgsmål er om det er muligt at få dette script til at toggle ALLE divs på siden på én gang?

Jeg har forsøgt med:
<a href="#" onclick="toggle_visibility('minDiv','minDiv2');return false;">Vis alle</a>.

- men det virker kun på den første div.
Hvordan gør man så alle divs vises/skjules med ét klik?

Mvh.
Avatar billede kgkg Nybegynder
18. august 2009 - 13:46 #1
Hvad med at du i din onclick event kalder en funktion hvor du har kald til din toggle_visibility funktion

<a href="#" onclick="toggleDIVS();return false;">Vis alle</a>.

F.eks.

function toggleDIVS(){
  toggle_visibility('id1');
  toggle_visibility('id2');
  toggle_visibility('id3');

  osv...
}
Avatar billede olebole Juniormester
18. august 2009 - 14:21 #2
<ole>

Uden at kunne se din kode kan man ikke give den gode løsning. Det ville jo nok være meget smart at 'bladre' dine divs igennem og gemme dem, der skal gemmes - så du ikke skal ændre funktionen, hvergang du sletter eller tilføjer et div  =)

/mvh
</bole>
Avatar billede dotcom1 Nybegynder
18. august 2009 - 15:36 #3
Hej.

Testside her: http://www.komfrisk.dk/test/test.html

Jeg ville også gerne undgå at skulle specificere alle divs i en funktion - netop så den ikke skal redigeres ved sletning eller nye divs.

Mvh.
Avatar billede dotcom1 Nybegynder
18. august 2009 - 15:49 #4
Tror at jeg har fundet en løsning på nette:

<script type="text/javascript">
<!--
function toggle_visibility(){
  for(var i = 0,len = arguments.length;i < len;i++){
    var e = document.getElementById(arguments[i]).style,d = e.display;
    e.display = (d == "block") ? "none" : "block";
  }
}

//-->
</script>

<a href="#" onclick="toggle_visibility('div1','div2','div3');return false;">Vis alle</a>

Det fungerer i hvert fald. Eller er der en bedre måde at gøre det på?
Avatar billede olebole Juniormester
18. august 2009 - 16:03 #5
Måske ikke så smart. Var det ikke bedre at give dem alle en klasse og teste på den:

<script type="text/javascript">
function toggle_visibility() {
    var aDvs = document.getElementById("menu").getElementsByTagName("div");
    for (var i=0,j=aDvs.length,o; i<j; i++) {
        o = aDvs[i];
        if (o.className=="foo") o.style.display = o.style.display=="block"?"none":"block";
    }
}
</script>

<ul id="menu">
  <li><a href="#" onclick="toggle_visibility('div1');return false;">Læs mere</a>
    <div class="foo" id="div1" style="display: none;">Indhold div1</div>
  </li>
  <li><a href="#" onclick="toggle_visibility('div2');return false;">Læs mere</a>
    <div class="foo" id="div2" style="display: none;">Indhold div2</div>
  </li>
  <li><a href="#" onclick="toggle_visibility('div3');return false;">Læs mere</a>
    <div class="foo" id="div3" style="display: none;">Indhold div3</div>
  </li>
</ul>
Avatar billede kgkg Nybegynder
18. august 2009 - 16:05 #6
Du skal jo stadig manuelt tilføje/slette div id's på dine links.

Nu skriver du ikke hvilket udviklingsmiljø du bruger, men prøv lige at kigge her:

http://www.projectseven.com/products/tools/accordion2/examples-options/cat05-01.htm

Du kan jo prøve at se om du kan gennemskue javascript koden som bruges.
Avatar billede olebole Juniormester
18. august 2009 - 16:20 #7
Nøøøhhhh ... hvorfor skulle han dog behøve det? Du kan vist ikke rigtig gennemskue koden ovenfor  ;o)
Avatar billede dotcom1 Nybegynder
19. august 2009 - 11:08 #8
Olebole:

Fin løsning, det fungerer perfekt. Tak for det. Læg et svar. :)
Avatar billede dotcom1 Nybegynder
19. august 2009 - 11:19 #9
Ah, der er lige en enkelt ting. Hvad gør man hvis man har underpunkter eller flere elementer som skal have samme id? Så validerer koden ikke længere. Se f.eks. http://www.komfrisk.dk/test/test2.html

Kunne man ændre scriptet til at løbe igennem flere id'er eller hvordan ville man løse det?
Avatar billede dotcom1 Nybegynder
19. august 2009 - 11:23 #10
Desuden, i ovennævnte test, så sker der en ting, som heller ikke er helt hensigtsmæssig: Hvis man blot vil udvide én, så udvides alle... :)
Avatar billede olebole Juniormester
19. august 2009 - 13:10 #11
Jamen, du kan da ikke have flere elementer med samme ID! Det er absolut og total no-go  =)

"Hvis man blot vil udvide én, så udvides alle..." >> Det er sandelig ikke en 'uhensigtsmæssighed'. Det er en ganske præcis opfyldelse af bestillingen:
"Mit spørgsmål er om det er muligt at få dette script til at toggle ALLE divs på siden på én gang?"
Avatar billede olebole Juniormester
19. august 2009 - 13:11 #12
- og hvis du vil have scriptet til at gøre noget andet, er du nødt til at beskrive præcis, hvad det skal gøre  =)
Avatar billede dotcom1 Nybegynder
19. august 2009 - 13:27 #13
Hej.

Ja, måske formulerer jeg mig ikke klart. :)

Hver enkelt div skal kunne vises/skjules med ét klik.

Derudover kunne det også være super med et link, som viser/skjuler alle divs på én gang med ét klik.

Jeg er klar over at man ikke kan have flere ens id'er, men hvad nu hvis man har flere elementer, man har behov for at få løbet igennem? Kan man få scriptet til at checke flere getElementById's, hvis du forstår hvad jeg mener?
Avatar billede dotcom1 Nybegynder
02. september 2009 - 09:06 #14
Olebole >> Det er tid til at lukke. Vil du lægge et svar?
Avatar billede olebole Juniormester
02. september 2009 - 09:27 #15
Undskyld, jeg havde ikke set din sidste kommentar. Har du fundet uid af det? Ellers må du lige spørge  =)
Avatar billede dotcom1 Nybegynder
02. september 2009 - 15:15 #16
Jeg er ikke kommet videre selv, men bruger bare scriptet som du lavede det. Hvis du har tid/lyst til at se på #13 er du hjertelig velkommen, men du får dine points under alle omstændigheder. :)
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