Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana CSS dla tr w okreslonym czasie, jak zidentyfikowac i "usunac"
shpaque
post 3.12.2021, 01:07:52
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Temat wydaje sie prosty, mam wyswietlone w tabeli informacje, ktore powinny byc usuwane po pewnym czasie, czyli dodajmy dla <tr> styl "display: none", wyglada to tak:

  1. var x = setInterval(function() {
  2. var now = new Date();
  3. var timeDifferent = now.setMinutes(now.getHours() - <?php echo (int)$settings -> archiveTime; ?>);
  4. var tableRows = $('#messageBody table tbody tr'); // tutaj wczesniej robilme analogicznie jak ponizej, czyli tr:first i tak dalej, ale nie dzialalo - zreszta po co skupiac sie na pierwszym <t> jak mozna usunac na raz wszystkie ktore nie pasuja
  5. var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html();
  6.  
  7. // Wyłączamy stare wiadomości
  8. var times = $(tableRows).find('td:last i').html().replace('<br>', ' '); // bo czas w niektorych momentach jest rodzielany na date i godzine w nowej linii - to nie ma znaczenia bo ponizszy if dziala dobrze
  9. if (new Date(times).getTime() < timeDifferent) {
  10. $(times).closest('tr').css('display', 'none');
  11. }
  12. ...


czas wyswietlany jest w <tr><td>...</td><td><i>2021-11-30<br>23:12:22</i></td> (lub jesli dzien jest ten sam to pole <td><i>... przyjmuje tylko godzine)
czyli jesli czas 'wiadomosci' jest mniejszy niz czas obecny - 12 godzin, to wylaczam wszystkie <tr> w ktorych ten czas jest "zaprzeszly" smile.gif
Go to the top of the page
+Quote Post
trueblue
post 3.12.2021, 09:14:06
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


W elemencie <tr> w atrybucie data-timestamp, podczas generowania strony zapisz timestamp.
Potem operuj bezpośrednio na <tr> i wartości tego atrybutu, a nie jakichś kombinacjach z tekstem.


--------------------
Go to the top of the page
+Quote Post
shpaque
post 3.12.2021, 09:43:56
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


no dobra ale jestem po wygenerowaniu strony i teraz chce jak widac setInterval'em - to jest czat wiec chodzi o to zeby bez przeladowywania strony usuwal najstarsze wiadomosci, ktorych czas dodania jest w ostatnim <td><i>czas</i></td>, wiec chce zeby skrypt sprawdzil po kazdym interwale (tu ustawiony co 2 sekundy) czy nie nalezy jakichs <tr> wylaczyc bo sa mniejsze nic czas obecny-12h ...

łopatologicznie:

$(w tabeli szukaj wszystkie TR)
if (czas w TR -> TD:last -> <i> jest mniejszy niż new Date(now)-12 hours) {$(wszystkie TR z mniejszymi datami).hide();}
Go to the top of the page
+Quote Post
trueblue
post 3.12.2021, 11:18:27
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Ale Ty generujesz kod HTML tej strony, tak?


--------------------
Go to the top of the page
+Quote Post
trueblue
post 3.12.2021, 11:18:27
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Ale Ty generujesz kod HTML tej strony, tak?


--------------------
Go to the top of the page
+Quote Post
shpaque
post 3.12.2021, 12:02:01
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


ok juz zaczailem o co ci chodzi, tylko teraz data timestamp jest krotsza od tej generowanej prze js czy to ma znaczenie? bo teraz mialoby jakos to tak wyglada?

  1. var tableRows = $('#messageBody table tbody tr');
  2. var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html();
  3.  
  4. // Wyłączamy stare wiadomości
  5. if ($(tableRows).attr('data-timestamp') < timeDifferent) {
  6. $(tableRows).hide();
  7. }


teraz mi wylacza wszystkie a jak zrobic zeby tylko te w ifie?
Go to the top of the page
+Quote Post
trueblue
post 3.12.2021, 12:28:47
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Ma to znaczenie. Musisz timestamp z JS podzielić przez 1000 i obciąć część ułamkową (parseInt(x/1000)).
Wiersze należy sprawdzić w pętli. Jak chciałbyś porównać jednym if'em wiele wartości naraz?


--------------------
Go to the top of the page
+Quote Post
shpaque
post 3.12.2021, 17:36:51
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


mozesz mi t oskrobnac/naprowadzic?


Cytat(trueblue @ 3.12.2021, 12:28:47 ) *
Ma to znaczenie. Musisz timestamp z JS podzielić przez 1000 i obciąć część ułamkową (parseInt(x/1000)).
Wiersze należy sprawdzić w pętli. Jak chciałbyś porównać jednym if'em wiele wartości naraz?


chyba działą, mam teraz tak:

  1. var now = new Date(();
  2. var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html();
  3. var timeDifferent = now.setHours(now.getHours() - <?php echo (int)$settings -> archiveTime; ?>);
  4. var timeStamp = Array();
  5.  
  6. // Wyłączamy stare wiadomości
  7. $('table tr').each(function(k, v) {
  8. timeStamp[k] = $(this).attr('data-timestamp');
  9. if (timeStamp[k] < parseInt(timeDifferent / 1000)) {
  10. $(this).hide();
  11. }
  12. });
  13. ...

Go to the top of the page
+Quote Post
trueblue
post 4.12.2021, 13:22:13
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tablica timeStamp jest zupełnie niepotrzebna.


--------------------
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: 28.03.2024 - 18:31