Witam!
Mam zamiar zrobić Chat na JavaScript (jQuery, Ajax itp). Wstępnie wychodzę z założenia, że nie chce pobierać kodu HTML rozmów, tylko generować je za pomocą skryptu JS z danych JSON. Za pomocą jQuery oscylować. Wszystko działa, ale też nie w 100% tak jak powinno. Zacznę opisywać:

Chat będzie podzielony na kilka pokoi, jedne będą bardziej popularne, inne mniej, ale to żadna przeszkoda. Tak samo ilość postów jaka będzie wyświetlana to będzie wartość dynamiczna, bo w jednym pokoju może być ich pięć, a w innym dwadzieścia. Nie zależnie od ilości pobieranych postów, trzeba w skrypcie wyróżnić w jaki sposób wyświetlać dane. Jak wiecie w jQuery odróżniamy ciekawe dwie funkcje – appendTo() i prependTo() – pozwalają nam dawać dane na końcu/początku wybranego elementu (w moim przypadku div-a). Trzeba jeszcze wspomnieć, że div w którym będą znajdować się posty – ma on identyfikator shoutboxPosts, a identyfikatory disów w których znajdzie się treść postu to post_[id]. Z góry zakładam, że identyfikatory postów nie mogą się powtarzać. Przy wyświetlaniu danych zakładam dwie sytuację:
1. wyświetlone zostały już jakieś posty
2. nie wyświetlono ani jednego postu

Wiedząc, że posty znajdują się w tablicy data.posts (która zawiera inne tablice zawierające takie dane: id postu, login, treść, data dodania i awatar), odpalam pętlę:
for (var index in data.posts)

W tej pętli na początku do zmiennej $id zapisuję identyfikator obecnego diva, który zostanie utworzony oraz w zmiennej $how zapisuję ilość postów już wyświetlonych:
[JAVASCRIPT] pobierz, plaintext
  1. $id = 'post_'+data.posts[index].id;
  2. $how = $('div[id^=post]').length;
[JAVASCRIPT] pobierz, plaintext


Następnym etapem jest utworzenie 2 warunków, żeby wiedzieć czy aktualizować wpisy czy dodawać:
[JAVASCRIPT] pobierz, plaintext
  1. if($how < data.limit)
  2. {
  3. if($("div[id = '"+$id+"']").length == 0)
  4. {
  5. $('<div id="'+$id+'"></div>').html(data.posts[index].message).appendTo('#shoutboxPosts');
  6. }
  7. }
  8. else if($how >= data.limit)
  9. {
  10. if($("div[id = '"+$id+"']").length == 0)
  11. {
  12. $("div[id^=post]:last").hide(0, function()
  13. {
  14. $(this).remove();
  15. {
  16. $('<div id="'+$id+'"></div>').html(data.posts[index].message).prependTo('#shoutboxPosts');
  17. }
  18. });
  19. }
  20. }
[JAVASCRIPT] pobierz, plaintext


Wszystko działa jak należy – jeżeli skrypt jest załadowany od nowa to wszystko fajnie się wyświetla, jeżeli dodam nowy post. Problem jest jak dodam w posty naraz (albo dwóch użytkowników doda w tym samym momencie lub zostaną pobrane nowe dwa wpisy). Pokazują się, a dwa ostatnie zostaną usunięte (żeby postów nie było więcej niż data.limit), jednak te wpisy już nie sortuje po dacie tylko dodaje nowe wpisy na początku głównego diva po koleji, a każdy następny nowy powinien być nad poprzednio popranym nowym. Mam nadzieje, że rozumiecie mój problem… To pokazania mojego problemu załączam screen.



Trzeba będzie pracować na ifie nr dwa czyli if($how >= data.limit)
Bardzo proszę o pomoc