[JS] Iemand enig idee wat de fout is?

Pagina: 1
Acties:

  • TheX
  • Registratie: Oktober 2001
  • Laatst online: 09:49
Ik heb een stuk JS code geschreven die de werking heeft van een uitklapbare menu-structuur samengebracht in een table. Het idee is al veel gebruikt en heb ook al andere oplossingen gezien op GoT, maar vraag me toch af wat er hier nu mis gaat.

Als je de onderstaande code in een html bestand paste dan zul je zien dat de subsections netjes staan ingesprongen, maar zodra je deze in klapt, de mogelijkheid verdwijnt om dat deel weer uit te klappen. Het lijkt er dus op dat de "class" property van een subsection niet correct wordt veranderd.

Als iemand enig idee heeft wat er hier nu mis gaat hoor ik dat graag, ik zie het op het moment even niet meer...

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<style type="text/css">
  tbody.closed .details {display:none;}
  tbody.closed .link_hide {display:none;}
  tbody.opened .link_show {display:none;}
</style>

<script type="text/javascript">
  function setParentNodeClass(currentNode, nodeTag, cssClass)
  {
    nodeTag = nodeTag.toUpperCase();
    while(currentNode.tagName != nodeTag)
    {
      if(!currentNode.parentNode)
        return false;
      currentNode = currentNode.parentNode;
    }
    currentNode.className = cssClass;
    return false;
  }
</script>

<table>
  <tbody class="closed">
    <tr>
      <td>Section 1</td>
      <td>
        <a class="link_hide" href="#HideDetails"
           onclick="return setParentNodeClass(this, 'tbody','closed');">Hide details</a>
        <a class="link_show" href="#ShowDetails"
           onclick="return setParentNodeClass(this, 'tbody','opened');">Show details</a>
      </td>
    </tr>
    <tr class="details">
    <td>&nbsp;</td>
    <td>
    <table>
    <tbody class="opened">
     <tr>   
       <td>SubSection 1</td>
       <td>
         <a class="link_hide" href="#HideDetails"
             onclick="return setParentNodeClass(this, 'tbody','closed');">Hide details</a>
         <a class="link_show" href="#ShowDetails"
             onclick="return setParentNodeClass(this, 'tbody','opened');">Show details</a>
       </td>
     </tr>
     <tr class="details"><td>&nbsp;</td><td>Details</td></tr>
     <tr class="details">
        <td>&nbsp;</td>
        <td>
        <table>
        <tbody class="opened">
         <tr>   
           <td>SubSubSection 1</td>
           <td>
             <a class="link_hide" href="#HideDetails"
                 onclick="return setParentNodeClass(this, 'tbody','closed');">Hide details</a>
             <a class="link_show" href="#ShowDetails"
                 onclick="return setParentNodeClass(this, 'tbody','opened');">Show details</a>
           </td>
         </tr>
         <tr class="details"><td>&nbsp;</td><td>Details</td></tr>
        </tbody>
        </table>
        </td>
        </tr>
    </tbody>
    </table>
    </td>
     </tr>
     <tr class="details">
    <td>&nbsp;</td>
    <td>
    <table>
    <tbody class="opened">
     <tr>   
       <td>SubSection 2</td>
       <td>
         <a class="link_hide" href="#HideDetails"
             onclick="return setParentNodeClass(this, 'tbody','closed');">Hide details</a>
         <a class="link_show" href="#ShowDetails"
             onclick="return setParentNodeClass(this, 'tbody','opened');">Show details</a>
       </td>
     </tr>
     <tr class="details"><td>&nbsp;</td><td>Details</td></tr>
    </tbody>
    </table>
    </td>
     </tr>
  </tbody>
</table>


edit:
Sry in verkeerde form, maar direct al verplaatst zag ik. Bedankt daarvoor en met 1 oog tv kijken en 1 oog juiste forum selecteren is blijkbaar moeilijker dan ik dacht

[ Voor 25% gewijzigd door TheX op 07-06-2005 22:00 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Javascript hoort in Webdesign & Graphics, evenals alle andere clientside zaken. :)

PW>>WG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:16

crisp

Devver

Pixelated

Cascading Stylesheet:
1
2
  tbody.closed .link_hide {display:none;}
  tbody.opened .link_show {display:none;}


think about it:

code:
1
2
3
4
5
6
7
8
tbody.opened
  tr
    td
      tbody.closed
        tr
          td
            a.link_hide
            a.link_show


welke rules worden hier toegepast op de anchors? ;)

Intentionally left blank


Verwijderd

Je fout zit niet in de JS maar in de CSS
Cascading Stylesheet:
1
2
3
4
5
<style type="text/css">
  tbody.closed .details {display:none;}
  tbody.closed .link_hide {display:none;}
  tbody.opened .link_show {display:none;}
</style>

De spaties tussen .opened en .link_show betekenen niet 'parent of' maar 'ancestor of'. Dat betekent dus dat als er ook maar één ancestor van een link_show de class opened heeft, hij niet zichtbaar wordt. Voeg deze lijn toe en het werkt:
Cascading Stylesheet:
1
tbody.opened tbody.closed .link_show {display:inline;}

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:16

crisp

Devver

Pixelated

Verwijderd schreef op dinsdag 07 juni 2005 @ 23:44:
[...]
Voeg deze lijn toe en het werkt:
Cascading Stylesheet:
1
tbody.opened tbody.closed .link_show {display:inline;}
totdat je weer een level dieper gaat...

Nu alleen nog omzetten naar een mooie list-structuur ;)

[ Voor 12% gewijzigd door crisp op 07-06-2005 23:48 ]

Intentionally left blank