Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ukryj, pokaż element (wiele elementów)
Masterson
post 6.12.2011, 00:03:59
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 18.07.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Kostek.88
post 6.12.2011, 00:20:31
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kostek.88 6.12.2011, 00:22:17
Go to the top of the page
+Quote Post
Masterson
post 6.12.2011, 00:40:43
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 18.07.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
by_ikar
post 6.12.2011, 08:43:08
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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>


Ten post edytował by_ikar 6.12.2011, 08:59:14
Go to the top of the page
+Quote Post
Masterson
post 6.12.2011, 10:20:50
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 18.07.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kostek.88
post 6.12.2011, 21:15:21
Post #6





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.


Ten post edytował Kostek.88 6.12.2011, 21:18:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 23:31