Отображение данных JQuery в HTML

0

Я использую jQuery для отображения сообщений из базы данных, это файл jquery:

function call() {
    $(".message_box").fadeIn();
    return false;
}
    function updatess() {
         $.getJSON("php/fetch.php", function(data) {
           $.each(data.result, function(){
            var message = this['message'];
            call();  
            $('div.message').html( message ); 
      });
     });
    }

и это HTML файл:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd" >
    <html>
    <head>
    <title>Sample Chat Application</title>
    <script type="text/javascript" src="/jquery.js" ></script>
    <script type="text/javascript" src="/my_js.js"></script>
    </head>
    <body>
<div class="message_box"> // some css like displayed:none; ......
        <div class="message"></div>
</div>  
  </body>
    </html>

но проблема в том, что если есть два сообщения, то отображается только последнее сообщение, и если есть много сообщений, каждый раз, когда приходит новое сообщение, он заменяет старый. но я хочу, чтобы все сообщения отображались. например, если я получаю 3 сообщения, я хочу, чтобы 3 поля отображались не один. когда я использую append вместо html, все сообщения появляются в одном поле.

  • 0
    $('div.message').append( message ); и перед each циклом $('div.message').empty();
Теги:

3 ответа

1

Вы должны использовать метод append вместо метода html который перезаписывает предыдущий контент:

function updatess() {
     $.getJSON("php/fetch.php", function(data) {
         // calling '.empty()' before the '.each()' call
         var $div = $('div.message').empty();
         $.each(data.result, function() {
            var message = this['message'];
            $div.append( message ); 
         });
    });
}

Обратите внимание, что я использовал метод .empty() для удаления старого содержимого перед .each(), если это не то, что вы хотите, и вы хотите сохранить текущий контент, вы можете удалить метод .empty().

edit: для создания и добавления элемента div с классом message для каждого сообщения:

$.each(data.result, function() {
     $(document.createElement('div'))
          .addClass('message')
          .html(this['message'])
          .appendTo('.message_box');
});
  • 0
    я редактирую проблему, пожалуйста, посмотрите снова.
  • 0
    @ user3446643 Я отредактировал ответ.
0

Вы заменяете HTML в своем div на каждую итерацию этой строкой:

$('div.message').html( message ); 

Вы можете обернуть сообщение в другой div, а затем добавить его:

var message = $('<div></div>').html(this['message']); 
$('div.message').append( message ); 

После редактирования:

Если для каждого элемента требуется новое поле для сообщения, вам нужно создать новое поле для каждого элемента.

Попробуй это:

function addMessage(message) {
    var messageBox = $('<div></div>').addClass('message_box');
    messageBox.append(message);
    $('body').append(messageBox);
    messageBox.fadeIn();
}

function updatess() {
     $.getJSON("php/fetch.php", function(data) {
       $.each(data.result, function(){
        var message = this['message'];
        addMessage(message);
  });
 });
}
  • 0
    я редактирую проблему, пожалуйста, посмотрите снова.
  • 0
    Если вы хотите новое окно сообщения для каждого элемента, вам нужно создать новое окно сообщения для каждого элемента. Взгляните на мою правку; дайте мне знать, если это поможет.
Показать ещё 1 комментарий
0

Пытаться:

 $('div.message').append( message ); 
  • 0
    я редактирую проблему, пожалуйста, посмотрите снова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню