Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ukryj, pokaż element (wiele elementów)
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Masterson
Witam.

Na stronie generuję listę rekordów, które wyświetlane są z parametrami. Z racji tego, że lista + parametry zajmują dużo miejsca, to postanowiłem je poukrywać i dać możliwość rozwinięcia uch po kliknięciu w przycisk.

skrypcik w jQuery wygląda tak:
  1. <script type="text/javascript">
  2. $(".hide_table").click(function () {
  3. $(".param_table").toggle("slow");
  4. });
  5.  
  6. <div style="float:left;">Szafa</div>
  7. <div class="hide_table" style="float:left;">Pokaż parametry</div>
  8. <div style="cleart:both;">
  9.  
  10. <table class="param_table" style="display:none;">
  11. <tr>
  12. <th>Kolor</th>
  13. <th>Długość</th>
  14. <th>Szerokość</th>
  15. </tr>
  16. <tr>
  17. <td>Czarny</td>
  18. <td>115 cm.</td>
  19. <td>82 cm.</td>
  20. </tr>
  21. </tbody>


Oczywiście działa poprawnie, ale tylko dla elementu o określonej klasie (w tym przypadku kliknięcie w div'a hide_table ukrywa tabele o klasie param_table. Gdybym chciał wykonać zwijanie/ rozwijanie dla wszystkich rekordów to musiałbym w miniskrypciku podawać wszystkie użyte klasy dla ukrywacza i dla elmentu ukrywającego. Obstawiam, że jest jakaś metoda aby w jQuery podać jakiś parametr (wyrażenie?), które nie będzie wymagało podawania wszystkich klas w skrypcie tak żeby element ukrywający sam dopasował "element ukrywany" na podstawie np. id?

Coś w stylu:
<script type="text/javascript">
$(".hide_table[x++]").click(function () {
$(".param_table[x++]").toggle("slow");
});
</script>

Druga sprawa. Teraz w divie, który pokazuje/ ukrywa parametry mam frazę "Pokaż parametry". Chciałbym aby w momencie rozwinięcia parametrów pojawiła się inna fraza, np. Ukryj parametry.

To jest moja pierwsza styczność z jQuery i pytania dla wielu z Was pewnie są banalne. Jeśli ktoś wie jak to zrobić to może zechce się podzielić wiedzą smile.gif.

Pozdrawiam
Kostek.88
Przeciez mozesz te same klasy ponadawac dla wielu elementow, poza tym masz duzo metod dojscia do elementow, np.

  1. <div class="divy">
  2. <div>opcja1</div>
  3. <div>opcja2</div>
  4. <div>opcja3</div>
  5. <div>opcja4</div>
  6. </div>


  1. $('.divy div').click(function(){
  2.  
  3. });


A co do drugiego:

  1.  
  2. $('.guzik').click(function(){
  3. if ($(this).text() == 'pokaz') {
  4. $(this).text() = 'ukryj';
  5. } else {
  6. $(this).text() = 'pokaz';
  7. }
  8. });


Oczywiscie z glowy pisane, tak mniej wiecej... zapoznaj sie z text, val, attr - to odnosnie odczytywania wartosci. No i z opcjami find, parent, parents, next, prev itp., ktore ulatwia Ci wedrowke po elementach

EDIT: aha, jeszcze toggle, toggleClass, removeClass, addClass, removeAttr - z tym sie zapoznaj smile.gif
Masterson
Dzięki za info.
Jutro na spokojnie sobie poszperam, teraz pora spać smile.gif.

Jeśli chodzi o użycie tych samych nazw klas to właśnie chodzi o to, że nie mogę tego zrobić ponieważ jak rozwinąłbym parametry jednego rekordu to rozwinęłyby mi się wszystkie (mają tą samą klasę).

rekord1
paramery1

rekord2
parametry2

i tak do 100 na stronę :]

Chodziło właśnie o to żeby z automatu uruchomić skrypt dla klasa1, klasa2, klasa3 itd., ale to już jutro sobie poszperam.

Pozdrawiam
by_ikar
Cytat(Masterson @ 6.12.2011, 00:40:43 ) *
Dzięki za info.
Jutro na spokojnie sobie poszperam, teraz pora spać smile.gif.

Jeśli chodzi o użycie tych samych nazw klas to właśnie chodzi o to, że nie mogę tego zrobić ponieważ jak rozwinąłbym parametry jednego rekordu to rozwinęłyby mi się wszystkie (mają tą samą klasę).

rekord1
paramery1

rekord2
parametry2

i tak do 100 na stronę :]

Chodziło właśnie o to żeby z automatu uruchomić skrypt dla klasa1, klasa2, klasa3 itd., ale to już jutro sobie poszperam.

Pozdrawiam



Poczytaj pierw o selektorach w css, potem o selektorach w jquery, a potem to już powinieneś sam pisać takie rozwiązania:

  1. $('.klasa1, .klasa2, .klasa3, .klasa4, .klasa5, .klasa6').click(function(){
  2. if ($(this).text() == 'pokaz') {
  3. $(this).text() = 'ukryj';
  4. } else {
  5. $(this).text() = 'pokaz';
  6. }
  7. });


http://api.jquery.com/class-selector/ poczytaj też komentarze, w komentarzach też jest wiele rzeczy których nie ma w dokumentacji.

EDIT: druga sprawa, przecież możesz w samym elemencie podać dodatkową klasę, przykładowo:

Kod
<div class="pierwsza_klasa druga_klasa trzecia_klasa"></div>
Masterson
Poczytaj pierw o selektorach w css, potem o selektorach w jquery, a potem to już powinieneś sam pisać takie rozwiązania:

[HTML] pobierz, plaintext

<script>
$('.klasa1, .klasa2, .klasa3, .klasa4, .klasa5, .klasa6').click(function(){
if ($(this).text() == 'pokaz') {
$(this).text() = 'ukryj';
} else {
$(this).text() = 'pokaz';
}
});
</script>

Ale zrozum, że chcę uniknąć takiego rozwiązania. Jak będę miał 1000 rekordów na stronie to mam podać 1000 klas w skrypcie jQuery? Rozwiązanie co najmniej nieeleganckie. Na pewno użyję .attr, dorzucę sobie jakiś atrybut, np. hidden = X, gdzie X będzie kolejną liczbą porządkową rekordu - powinno zadziałać.

EDIT: druga sprawa, przecież możesz w samym elemencie podać dodatkową klasę, przykładowo:

Kod
<div class="pierwsza_klasa druga_klasa trzecia_klasa"></div>

To jest oczywiste, ale zamiast klasy użyję atrybuty specjalnie na potrzeby ukrywania.

Dzięki
Pozdrawiam
Kostek.88
A takie cos?

  1.  
  2. <dl>
  3. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  4. <dd><table> itd.</dd>
  5.  
  6. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  7. <dd><table> itd.</dd>
  8.  
  9. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  10. <dd><table> itd.</dd>
  11.  
  12. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  13. <dd><table> itd.</dd>
  14.  
  15. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  16. <dd><table> itd.</dd>
  17.  
  18. <dt>szafa <a class="link" href="java script:void(0)">pokaz parametry</a></dt>
  19. <dd><table> itd.</dd>
  20. </dl>
  21.  


  1. $(document).ready(function(){
  2.  
  3. $('dd').hide();
  4.  
  5. $('a.link').click(function() {
  6. $(this).parent('dt').next('dd').toggle('slow');
  7.  
  8. if ($(this).text() == 'pokaz parametry') {
  9. $(this).text() = 'ukryj parametry';
  10. } else {
  11. $(this).text() = 'pokaz parametry';
  12. }
  13. });
  14.  
  15. });


Cos tego typu... ja bym to tak okodowal. Oczywiscie mozesz przerobic na swoje potrzeby. Wskazowka: jesli chcesz wyjsc kilka poziomow wyzej to zamiast parent musi byc parents. Ale, zeby nie bylo tak latwo... jak masz zagniezdzonych w sobie kilka div-ow, to moze Ci zlapac wszystkie nadrzedne, dlatego pomocne jest czasami:

  1. $(this).parents('div:first').................... itd.
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.