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:
var x = setInterval(function() { var now = new Date(); var timeDifferent = now.setMinutes(now.getHours() - <?php echo (int)$settings -> archiveTime; ?>); 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 var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html(); // Wyłączamy stare wiadomości var times = $(tableRows).find('td:last i').html().replace('<http://december.com/html/4/element/br.html>', ' '); // bo czas w niektorych momentach jest rodzielany na date i godzine w nowej linii - to nie ma znaczenia bo ponizszy if dziala dobrze if (new Date(times).getTime() < timeDifferent) { $(times).closest('tr').css('display', 'none'); } ...
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.
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();}
Ale Ty generujesz kod HTML tej strony, tak?
Ale Ty generujesz kod HTML tej strony, tak?
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?
var tableRows = $('#messageBody table tbody tr'); var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html(); // Wyłączamy stare wiadomości if ($(tableRows).attr('data-timestamp') < timeDifferent) { $(tableRows).hide(); }
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?
mozesz mi t oskrobnac/naprowadzic?
var now = new Date((); var lastMessageTime = $('#messageBody table tr:last td:last').find('i').html(); var timeDifferent = now.setHours(now.getHours() - <?php echo (int)$settings -> archiveTime; ?>); var timeStamp = Array(); // Wyłączamy stare wiadomości $('table tr').each(function(k, v) { timeStamp[k] = $(this).attr('data-timestamp'); if (timeStamp[k] < parseInt(timeDifferent / 1000)) { $(this).hide(); } }); ...
Tablica timeStamp jest zupełnie niepotrzebna.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)