2009-07-01 3 views
3

Я создаю базовый форум, где каждое сообщение содержит имя автора, текст и дату его создания. Я хотел бы, чтобы форум постоянно обновлялся через AJAX и показывал новые сообщения, которые были созданы на лету. В настоящее время у меня есть файл PHP getlatest.php?lastid=..., который извлекает все сообщения из идентификатора, данного самому последнему. возвращает данные в HTML, например, так (я уже изменил его, так что вы можете увидеть дивы, StackOverflow выбрасывает их):Выбор divs, полученных через AJAX в jquery


foreach ($print as $value) 
{ 
    $readyText .= div id = $value->post_id; 
    $readyText .= $value->first_name.' '.$value->last_name.' posted the following:'. 
    $value->post_text.' The post was made about '.$time.' ago. 
    $readyText .= '/div>'; 
}

У меня есть некоторые AJAX код JQuery, который извлекает каждые несколько минут


setInterval("update()", 3000); 
      function update() 
      { 
       $.get("getlatest.php", 
       { 
        id: latestmessage 
       }, 
       function(response){ 
        $("#forum_entries").prepend(response); 
        latestmessage = $.cookie('last_post_id'); //This is 
             //how I know what the latest post id is 
       }, "html"); 

Я хотел, чтобы выделить все новые сообщения, которые были представлены с использованием (в настоящее время очень популярна) желтую техники выцветанию, как и

$("#somediv").effect("highlight", {}, 1500); 

Мой вопрос - к чему Div в Я применяю этот эффект? Я должен добавить это в PHP, каждый пост на форуме имел идентификатор div, который был фактически его PK в базе данных.

ответ

5

Измените свою функцию, чтобы вместо использования prepend она использовала prependTo. PrependTo вернет элементы, которые были добавлены, и вы можете применить выделение к этим элементам (используя jQuery 1.3.2).

$.get('getlatest.php', 
     { id: latestmessage }, 
     function(response) { 
      $(response).prependTo('#forum_entries').effect('highlight',{},1500); 
      latestmessage = $.cookie('last_post_id'); 
     }, 'html'); 
1

Просто дайте Див активный класс:

<?php 

foreach ($print as $value) 
{ 
    $readyText .= '<div id = "' . $value->post_id . '" class="active"'; 
    $readyText .= $value->first_name.' '.$value->last_name.' posted the following:'. 
    $value->post_text.' The post was made about '.$time.' ago. 
    $readyText .= '</div>'; 
} 

?> 



setInterval("update()", 3000); 
      function update() 
       { 
       $.get("getlatest.php", 
         { 
        id: latestmessage 
       }, 
         function(response){ 
        $("#forum_entries").prepend(response); 
        latestmessage = $.cookie('last_post_id'); 
      $("div.active").effect("highlight", {}, 1500); 
      $("div.active").toggleClass("active"); 

       }, "html"); 

Как я уже предложил в ответ на свой предыдущий вопрос она действительно имеет смысл для вас, чтобы узнать немного JavaScript в сочетании с одним из популярные библиотеки/рамки (я бы порекомендовал jQuery, который использует приведенный выше пример).

0

В то время как в цикле вы можете добавить атрибут фальшивого класса к Новее дивам ... затем в вашем АЯКСЕ вызова после предваряя к #forum_entries вы можете применить подсветку, удалить атрибут класса по removeAttr (имя_класс) в JQuery. и т.д. следующего исполнения у вас не будет проблем.

Смежные вопросы