ugrás a tartalomhoz

DOM és style.display

bsanyi · 2006. Júl. 11. (K), 12.51
Üdv Mindenkinek,

olyan kérdésem lenne, hogy van egy treeview kezdeményem, amely ul /li -ből épül fel és szeretném az egyes elemek esetében az li-ben található első ul-t eltűntetni?

Próbálkoztam DOM-mal, de nem igazán sikerült:
Javascript:
  1. <script language="Javascript">  
  2.         function expand(value) {  
  3.             var currentItem = value;  
  4.             for (var i=0; i<currentItem.childNodes.length; i++) {  
  5.                 if (currentItem.childNodes[i].nodeName == 'UL') {  
  6.                     //alert(currentItem.childNodes[i].style.display);  
  7.                     if (currentItem.childNodes[i].style.display == 'block') {  
  8.                         currentItem.childNodes[i].style.display = '';  
  9.                     } else {  
  10.                         currentItem.childNodes[i].style.display = 'block';  
  11.                     }  
  12.                 }  
  13.                 //alert(currentItem.childNodes[i].nodeName);  
  14.             }  
  15.         }  
  16. </script>  
  1. <body>  
  2.     <ul class="tv_container">  
  3.         <li class="tv_item_open_exp" onclick="expand(this)"><div class="text_middle_open">Első elem</div>  
  4.             <ul class="tv_container tv_container_inner">  
  5.                 <li class="tv_item_open_exp" onclick="expand(this)"><div class="text_middle_open">Második elem</div>  
  6.                     <ul class="tv_container tv_container_inner">  
  7.                         <li class="tv_item">Második elem</li>  
  8.                         <li class="tv_item">Második elem</li>  
  9.                         <li class="tv_item">Második elem</li>  
  10.                         <li class="tv_item">Második elem</li>  
  11.                     </ul>  
  12.                 </li>  
  13.                 <li class="tv_item_close_exp" onclick="expand(this)"><div class="text_middle_close">Második elem</div>  
  14.                     <ul class="tv_container tv_container_inner">  
  15.                         <li class="tv_item">Istentelen</li>  
  16.                     </ul>  
  17.                 </li>  
  18.             </ul>  
  19.         </li>  
  20.         <li class="tv_item_close_exp" onclick="expand(this)"><div class="text_middle_open">Harmadik elem</div>  
  21.             <ul class="tv_container tv_container_inner">  
  22.                 <li class="tv_item">Negyedik elem</li>  
  23.             </ul>  
  24.         </li>  
  25.     </ul>  
  26. </body>  
Nem igazán tudom hol rontom el, esetleg valami segítséget tudtok adni?

Kösz
bsanyi
 
1

css lemaradt

bsanyi · 2006. Júl. 11. (K), 13.00
  1. .tv_container {  
  2.     padding0px;  
  3.     margin0px;  
  4.     background-imageurl(../IMG/container_left.gif);  
  5.     background-repeatrepeat-y;  
  6.     background-positionleft;  
  7.     background-color: White;  
  8.     font-familyArialHelveticasans-serif;  
  9.     font-size12px;  
  10.     displayblock;  
  11. }  
  12.   
  13. .tv_container_inner {  
  14.     margin-left15px;  
  15. }  
  16.   
  17. .tv_item {  
  18.     list-style-typenone;  
  19.     margin-left7px;  
  20.     padding-left10px;  
  21.     line-height13px;  
  22.     background-imageurl(../IMG/hr_line.gif);  
  23.     background-repeatno-repeat;  
  24.     background-positionleft;  
  25. }  
  26.   
  27. .tv_item_open_exp {  
  28.     list-style-typenone;  
  29.     line-height14px;  
  30. }  
  31.   
  32. .tv_item_close_exp {  
  33.     list-style-typenone;  
  34.     line-height14px;  
  35. }  
  36.   
  37. .tv_item_open_exp_img {  
  38.     border0px;  
  39. }  
  40. .text_middle_open {  
  41.     background-imageurl(../IMG/open_exp.gif);  
  42.     padding-left16px;  
  43.     displayinline;  
  44.     positionrelative;  
  45.     background-positiontop left;  
  46.     background-repeatno-repeat;  
  47. }  
  48. .text_middle_close {  
  49.     background-imageurl(../IMG/close_exp.gif);  
  50.     padding-left16px;  
  51.     displayinline;  
  52.     positionrelative;  
  53.     background-positiontop left;  
  54.     background-repeatno-repeat;  
  55. }  
2

re

toxin · 2006. Júl. 11. (K), 13.39
  1. <script language="Javascript">  
  2. function expand(elem) {  
  3.     var elems = elem.getElementsByTagName('ul')  
  4.     elems[0].style.display =  (typeof(elems[0].style.display) == "undefined" || elems[0].style.display == 'none' )?'block':'none';  
  5. }  
  6. </script>  
üdv t
3

Bubbling

rpspace · 2006. Júl. 11. (K), 14.20
Először is kell egy
currentItem.childNodes[i].style.display = 'none';
Majd utána az esemény bubbling miatt meg kell akadályozni, hogy a a click továbbítódjon a szűlőobjektumoknak:

1. A script:
  1. <script language="Javascript">  
  2.         function expand(value,e) {  
  3.             var currentItem = value;  
  4.             for (var i=0; i<currentItem.childNodes.length; i++) {  
  5.                 if (currentItem.childNodes[i].nodeName == 'UL') {  
  6.                     //alert(currentItem.childNodes[i].style.display);  
  7.                     if (currentItem.childNodes[i].style.display != 'none') {  
  8.                         currentItem.childNodes[i].style.display = 'none';  
  9.                     } else {  
  10.                         currentItem.childNodes[i].style.display = 'block';  
  11.                     }  
  12.                 }  
  13.                 //alert(currentItem.childNodes[i].nodeName);  
  14.             }  
  15.   
  16.             if (!e) var e = window.event;  
  17.             e.cancelBubble = true;  
  18.             if (e.stopPropagation) e.stopPropagation();  
  19.   
  20.     }  
  21. </script>  
vagy toXin által beküldött kód kiegészítve a bubbling gátlással:
  1. <script language="Javascript">  
  2.   function expand(elem,e) {  
  3.     var elems = elem.getElementsByTagName('ul')  
  4.     elems[0].style.display =  (typeof(elems[0].style.display) == "undefined" || elems[0].style.display == 'none' )?'block':'none';  
  5.   
  6.     if (!e) var e = window.event;  
  7.     e.cancelBubble = true;  
  8.     if (e.stopPropagation) e.stopPropagation();  
  9.     }  
  10. </script>  
1. utána mindenhol a html-ben:
onclick="expand(this,event)" //itt a plusz a ",event"
4

Köszönöm

bsanyi · 2006. Júl. 11. (K), 14.59
köszönöm a válaszodat, a stoppropagationra már magam is rájöttem és számoltam is vele, ezért be is építettem miután kipróbáltam a válaszban érkezett kódot.

A végeredmény egy kicsit más lett, mert osztályt is kellett változtatnom, de azt hiszem, most megint tanultam egy csomót.

Igen ez a != és == összahasonlító operátorok sokx megszivatnak engem, ideje lenne megtanulni rendesen használni őket :-)

Üdv
bsanyi