Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS][Jquery]Pobranie kolejnych elementów
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
grzes999
Witam
Mam taki kod html

  1. <tr>
  2. <td id="wolne"></td>
  3. <td id="wolne"></td>
  4. <td id="wolne"></td>
  5. <td id="zajete"><td>
  6. <td id="zajete"><td>
  7. <td id="zajete"><td>
  8. <td id="wolne"></td>
  9. <td id="zajete"><td>
  10. </tr>


i taki kod javasript

[JAVASCRIPT] pobierz, plaintext
  1. $(function () {
  2. $('[id="dni_wolne"]').click (function () {
  3. $(this).siblings('#dni_wolne').attr('id','koniec')
[JAVASCRIPT] pobierz, plaintext


A teraz o co mi chodzi. chodzi mi o to żeby po kliknięciu w td o id wolne wszystkim kolejnym td z id wolne zmieniło id na koniec. To co napisałem zamienia mi wszystkie td a nie tylko następne od klikniętego. Próbowałem już różnych sposobów; ale nic mi nie wychodzi :/ Może ktoś ma jakieś pomysły.

Nikt na prawdę nie ma na to pomysłu?questionmark.gif
kamil4u
Zacznij od tego, że id jest unikalne i musi takie być.
grzes999
Ok mogę zrobić, że id będzie unikalne i co dalej bo nie mam pomysłu :/
kamil4u
Nie możesz musisz smile.gif
Potem: nextAll i http://jsfiddle.net/SjSx6/
grzes999
Wielkie dzięki za pomoc smile.gif A jeszcze takie małe pytanie może będziesz wiedział.
Chodzi mi o to żeby po napotkaniu klasy zajęte kolejne elementy wolne nie były już zaznaczane.
Bardzo mi chodzi o to czy jest takie coś wykonalne w marę prosty sposób i może jakieś ewentualne podpowiedzi jak się za takie coś zabrać.
kamil4u
Tym razem nie dostaniesz gotowca smile.gif - jedynie podpowiedź

Pobierasz wszystkie elementy za danym ( nextAll ). Następnie lecisz pętlą ( each ) . Dalej w pętli sprawdzasz czy( if ) klasa aktualnego elementu( attr/class ) = 'zajete'. Jeżeli tak to przerywasz pętlę( tu nie jestem pewien, ale chyba break - musisz sprawdzić ), a jeżeli nie to zmieniasz aktualną klasę.

Podsumowując - będzie 2-3 linie smile.gif
Jeżeli sobie nie poradzisz wróć z kodem - może być niepoprawny, ale pokaż, że coś robiłeś.

Pozdrawiam
grzes999
A nie był mi potrzebny gotowiec smile.gif już zrobiłem i pięknie działa smile.gif
Gdy by komuś było taki coś potrzebne oto przykładowy kod

  1. <p class="wolne">11</p>
  2. <p class="wolne">12</p>
  3. <p class="zajete">13</p>
  4. <p class="wolne">20</p>
  5. <p class="wolne">21</p>
  6. <p class="zajete">14</p>
  7. <p class="wolne">15</p>
  8. <p class="wolne">16</p>


  1. .zajete{ color: red; }
  2. .wolne{ color: green; }
  3. .koniec{ color: blue; }


[JAVASCRIPT] pobierz, plaintext
  1. $(function () {
  2. $('.wolne').click (function () {
  3. var elementy = $(this).nextAll();
  4. elementy.each(function() {
  5. if($(this).attr('class') == 'zajete')
  6. {
  7. return false;
  8. }
  9. else
  10. {
  11. $(this).addClass('koniec');
  12. }
  13. })
  14. })
  15. });
[JAVASCRIPT] pobierz, plaintext


I mam jeszcze jeden problem. Bo zmieniłem sobie troszkę ten skrypt żeby mi zaznaczał zaznaczony przedział. I przy kliknięciu na wolne dodaję kolor tła i póżniej przy kliknieciu w jakiś dzień zaznaczam daty poprzednie. Tylko chodzi mi o to żeby nie można było kliknąć daty po terminie zajętym więc wszystkim datom po zajętym zmieniłem klasę na blokada ale i tak można zaznaczyć tamte dni :/

Kod po zmianach

http://jsfiddle.net/SjSx6/4/
kamil4u
Wyjaśnij trochę dokładnie. Co mam kliknąć i jak jest, a jak powinno być.

Podejrzewam, że problemem jest addClass. To znaczy, że jeżeli element ma klasę A( class="A" ), a Ty użyjesz addClass("B") to powstanie (class="A B")
Jeżeli natomiast element ma klasę A( class="A" ), a Ty użyjesz attr("class","B") to powstanie (class="B").

Nie wiem czy w tym leży problem, bo do końca nie rozumiem problemu
grzes999
Chodzi o to że jak ktoś wybierze początek w kalendarzu (bo docelowa jest mi to potrzebne do kalendarza) to żeby mógł zaznaczyć koniec przed rezerwacją.
A teraz jest tak że jak zaznaczę powiedzmy 2 to jak kliknę na 7 (po zaznaczeniu) to on też mi się zaznacz jako początek oczywiście. Może trochę zamotałem; ale ogolnie chodzi o to żeby jak kliknę na 2 to 7 nie dało się zaznaczyć a teraz się da.
Qvazar
Może tak - kod oczywiście do sprawdzenia i ewentualnych poprawek - pisałem na kolanie
[JAVASCRIPT] pobierz, plaintext
  1. $('.wolne').click (function () {
  2. var nr_click=$(this).index();
  3. var nr_zajete=$('.zaznaczone:last').nextAll('.zajete').first().index();
  4. var nr_zajete_prev=$('.zaznaczone:first').prevAll('.zajete').first().index();
  5.  
  6. if(nr_zajete<0){$(this).addClass('zaznaczone');}
  7. else
  8. if(nr_click<nr_zajete && nr_click>nr_zajete_prev)
  9. {
  10. $(this).addClass('zaznaczone');
  11. var elementy = $('.zaznaczone:first').nextAll('.wolne').not('.zaznaczone');
  12. elementy.each(function(i) {if($(this).index()<nr_click){$(this).addClass('zaznaczone')};})
  13. }
  14.  
  15. })
  16.  
[JAVASCRIPT] pobierz, plaintext
grzes999
Wielkie dzięki działa jak natura chciała smile.gif

Jeszcze jedno pytanie odnośnie tematu. Przerobiłem skrypt żeby po najechaniu na datę zmieniało kolor i zostawało a po cofnięciu kursora usuwało klasę z kolorem.
I wszystko ładnie dział. Tylko że nie odznacz mi ostatniego elementu :/

http://jsfiddle.net/SjSx6/7/

Tak, że jeszcze raz proszę o wskazówki i porady 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.