Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX]jQuery podstrony na divach tzw. tab.
Forum PHP.pl > Forum > Przedszkole
casperii
Witam, mam kod, który działa, lecz chciałbym go zmodyfikować i nie bardzo wiem jak.
  1. .tab {
  2. display:block;
  3. }
  4. .tab.active,
  5. .tab:hover {
  6. }
  7. .content {
  8. display:none;
  9. clear:both;
  10. background:#FFF;
  11. padding:20px;
  12. }
  13. .content.active {
  14. display:block;
  15. }
  16.  
  17. $(function () {
  18.  
  19. $('[data-tab]').on('click', function (e) {
  20. $(this)
  21. .addClass('active')
  22. .siblings('[data-tab]')
  23. .removeClass('active')
  24. .siblings('[data-content=' + $(this).data('tab') + ']')
  25. .addClass('active')
  26. .siblings('[data-content]')
  27. .removeClass('active');
  28. e.preventDefault();
  29. });
  30.  
  31. });

  1. <div data-tab="1" class="tab active"><a href="#">Tab 1</a></div>
  2. <div data-tab="2" class="tab"><a href="#">Tab 2</a></div>
  3. <div data-tab="3" class="tab"><a href="#">Tab 3</a></div>
  4. <div data-tab="4" class="tab"> <a href="#">Tab 4</a></div>
  5. <div data-tab="5" class="tab"><a href="#">Tab 5</a></div>
  6.  
  7. <div data-content="1" class="content active">Tab 1 Content</div>
  8. <div data-content="2" class="content">Tab 2 Content</div>
  9. <div data-content="3" class="content">Tab 3 Content</div>
  10. <div data-content="4" class="content">Tab 4 Content</div>
  11. <div data-content="5" class="content">Tab 5 Content</div>


Chciałbym, teraz włożyć część pierwszą divów w dwa divy. Czyli takie coś:

  1. <div><div>
  2. <div data-tab="1" class="tab active"><a href="#">Tab 1</a></div>
  3. <div data-tab="2" class="tab"><a href="#">Tab 2</a></div>
  4. <div data-tab="3" class="tab"><a href="#">Tab 3</a></div>
  5. <div data-tab="4" class="tab"> <a href="#">Tab 4</a></div>
  6. <div data-tab="5" class="tab"><a href="#">Tab 5</a></div>
  7. </div></div>
  8. <div data-content="1" class="content active">Tab 1 Content</div>
  9. <div data-content="2" class="content">Tab 2 Content</div>
  10. <div data-content="3" class="content">Tab 3 Content</div>
  11. <div data-content="4" class="content">Tab 4 Content</div>
  12. <div data-content="5" class="content">Tab 5 Content</div>


Proszę teraz o pomoc w JS tak by mi działało. Dodawanie / usuwanie klasy.
salfunglandyare
Spróbuj:
  1. $(function () {
  2.  
  3. $('[data-tab]').on('click', function (e) {
  4. var that = $(this);
  5. var parent = that.parent().parent().parent();
  6. that
  7. .addClass('active')
  8. .siblings('[data-tab]')
  9. .removeClass('active');
  10. $('[data-content]',parent)
  11. .removeClass('active')
  12. .siblings('[data-content=' + that.data('tab') + ']')
  13. .addClass('active');
  14. e.preventDefault();
  15. });
  16.  
  17. });


//edit - poprawka JS - 2 divy
casperii
Cytat(salfunglandyare @ 5.05.2015, 22:17:56 ) *
Spróbuj:
  1. $(function () {
  2.  
  3. $('[data-tab]').on('click', function (e) {
  4. var that = $(this);
  5. var parent = that.parent();
  6. that
  7. .addClass('active')
  8. .siblings('[data-tab]')
  9. .removeClass('active');
  10. $('[data-content]',parent)
  11. .removeClass('active')
  12. .siblings('[data-content=' + that.data('tab') + ']')
  13. .addClass('active');
  14. e.preventDefault();
  15. });
  16.  
  17. });


Dzięki, ale podane przez Ciebie rozwiązanie nie skutkuje, jeżeli ten DIV nie jest w tych dwóch DIVACH to divy się przeładowują, czyli tak jak i w moim przykładzie, problem nadal jest jeżeli DIV umieszczę w DIVACH.
salfunglandyare
Tak, przed momentem poprawiłem biggrin.gif za malo divow w gore, sprawdz jeszcze raz wyedytowane, mozesz tez sprawdzic: https://jsfiddle.net/dnzLp30a/
casperii
Dziękuje kolego :-) Zastanawiam się czy dobry sposób obrałem, ponieważ w tych divach będą części formularzy np. div z formularzem danych podstawowych (imię, nazwisko), div z formularzem danych szczegółowych (wykształcenie, wiek). Jak myślisz odbije się to później jakoś na tym JS ?
salfunglandyare
to zależy, jeśli będziesz dodawał kolejne dzieci - tak. Tu jest, jak widzisz .parent().parent().parent() co oznacza, że cofa się o 3 stopnie w drzewie DOM. Jeśli dodasz jeszcze kolejnego diva, lub umiescisz div[data-content] poza ostatnim elementem - może to przestać działać. W razie problemów napisz później, gdy będziesz miał w miarę ostateczną wersję. Mógłbyć też nadać tym elementom unikalną klasę i wtedy możnaby wyszukiwać tych elementów zawsze z poziomu korzenia drzewa DOM, wtedy możliwość, że coś się spieprzy będzie mniejsza smile.gif
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.