Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Ukrywanie i odkrywanie kolumny w tabeli
Forum PHP.pl > Forum > Przedszkole
Flake
Witam,
Muszę do istniejącej już (generowanej automatycznie) tabeli dorobić opcję z pokazywaniem i chowaniem się jednej kolumny za pomocą jednego guzika. Podejrzewam, że trzeba zmienić styl z np. display: none; na display: table-cell za pomocą JavaScript - Niestety nie mam pojęcia jak odwołać się do konkretnej kolumny za pomocą jednego guzika.

Na internecie znalazłem kilka przykładów ale wszystkie były 'statyczne' - więc odwoływały się przez ID

  1. .doukrycia {display: none;}
  2.  
  3. ...
  4.  
  5. <label><input type="submit" value="Pokaz/Ukryj kolumny" /></label>
  6. <table border="1">
  7. <tr>
  8. <th>ID</th>
  9. <th class="doukrycia">Produkt</th>
  10. <th>Cena</th>
  11. </tr>
  12. {foreach from=$produkty item=produkty}
  13. <tr>
  14. <td>{$id}</td>
  15. <td class="doukrycia">{$produkt}</td>
  16. <td>{$cena}</td>
  17. </tr>
  18. {/foreach}
kamil4u
Przerób pod własne potrzeby smile.gif :
Kod
<style>
td{ border:1px solid black; }
</style>

<table id="test">
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>

<script>
var trs = document.getElementById('test').getElementsByTagName('tr');
for(var i=0, td; td = trs[i++].getElementsByTagName('td')[1]; ){
  td.style.backgroundColor = 'red';
}

</script>
Flake
Prawie działa ^^ a mianowicie:

1 - mam w tabeli jeszcze th - ale to chyba można zrobić analogicznie jak z td (chyba ze jest prostszy sposób )
2 - przykład który mi podałeś działa - ale jak włączę konsole JS to mam error:

Uncaught TypeError: Cannot call method 'getElementsByTagName' of undefined
kamil4u
Ad1. tak, zrób to analogicznie
Ad2. Nie wiem do końca dlaczego tak, ale zrób:
Kod
<style>
td{ border:1px solid black; }
</style>

<table id="test">
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>

<script>
var tr = document.getElementById('test').getElementsByTagName('tr'),td;
for(var i=0; td = tr[i++]; ){
  td.getElementsByTagName('td')[1].style.backgroundColor = 'red';
}

</script>
Flake
Prawie działa ^^ - niestety znika/pojawi się tylko pierwsza komórka danej kolumny - to chyba przez to, że tabela jest tworzona dynamicznie ponieważ na statycznym przykładzie wszystko działa pięknie - a gdy wrzucam to do php to element TH w ogóle się nie pojawia a TD tylko w pierwszym wierszu - jakieś pomysły jak to naprawić?

  1.  
  2. <label><input type="submit" value="Ukryj produkty" onclick="ukryj()" /></label><label><input type="submit" value="Pokaz produkty" onclick="odkryj()" /></label>
  3.  
  4. <table id="test" class="tabela" border="0" cellspacing="0">
  5. <tr>
  6. <th>nr dokumentu</th>
  7. <th style="display: none">produkty</th>
  8. <th>użytkownik</th>
  9. </tr>
  10.  
  11. {foreach from=$produkty item=produkty}
  12. <tr class="{cycle values=',odd-row'}{$tr_class}">
  13. <td>{$produkty->nr_dokumentu}</td>
  14. <td style="display: none">
  15. <table cellspacing="0" class="produkty">
  16. {foreach from=$proukty->produkty item=produkt}
  17. <tr>
  18. <td>{$produkt->nazwa_prod|escape}</td>
  19. <td>{$produkt->ilosc} szt.</td>
  20. </tr>
  21. {/foreach}
  22. </table>
  23. </td>
  24. <td>{$produkty->username}</td>
  25. </tr>
  26. {/foreach}


funkcje w JS
  1. function ukryj() {
  2. var tr = document.getElementById('test').getElementsByTagName('tr'),td;
  3.  
  4. for(var i=1; td = tr[i++]; ){
  5. td.getElementsByTagName('td')[2].style.display = 'none';
  6. }
  7.  
  8. th = tr[0];
  9. th.getElementsByTagName('th')[2].style.display = 'none';
  10. }
  11.  
  12. function odkryj() {
  13. var tr = document.getElementById('test').getElementsByTagName('tr'),td;
  14.  
  15. for(var i=1; td = tr[i++]; ){
  16. td.getElementsByTagName('td')[2].style.display = 'table-cell';
  17. }
  18.  
  19. th = tr[0];
  20. th.getElementsByTagName('th')[2].style.display = 'table-cell';
  21. }


edit: ok już wiem, że problemem jest zagnieżdżona tabelka - tylko nie wiem jak 'wyłączyć' ją z działania funkcji - jakieś pomysły?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.