jquery - 疑难的Jquery <div> 问题,求高手指教

标签 jquery html css

大家好,我有一个奇怪的问题。我有一个 jquery 脚本,它基本上按照降序时间顺序将来自 php 脚本中数据的消息一条一条地添加到前面,以便最新消息位于顶部。我想做的是以某种方式在两条或更多条消息发出时将一个 div 容器放在它们周围,所以我决定检查哪条消息是最旧的,并在该消息前加上一个标签,在最新的消息前加上标签,因为每条消息都会发出一个一个。然而,这并没有奏效,因为 div 似乎没有检测到外壳,并且只部分地包含了 2 个测试消息(只包含了第一个)。如果有人对如何实现这一点有任何建议,我很乐意听取他们的意见。

     function prepare(response) {
          count++;

//function in another doc
nicetime = handleDate(response.timestamp);

if (response.replydiv=='start'){
    var list_name='<div id="chunk">start';
}
else{
    var list_name='';
}
  if (response.creator!==''){
        var list_name=list_name+'<li class="message-list-creator" id="list-'+count+'">'
    }
    else{
        var list_name=list_name+'<li class="message-list" id="list-'+count+'">'
    }




            var string = ''+list_name+''

              + '<span class="message-list-nick"><a href="statistics.php?user='+response.user+'">'+response.user+'</a></span>'
              + ' <span class="date" id='+response.timestamp+'>'+nicetime+'</span><br>'
              + '<span class="msg">'+response.message+'</span>'
              + '<span class="clear"></span>'
              if(response.reply!='null'){
               var string = string +'<a message_id="'+response.reply_chunk_id+'" id="reply">reply</a></li>';
              }
              else {
                 var string=string+'</li>';
              }


              if (response.replydiv=='end'){
            var string=string +'</div>end';
        }

          return string;
        }

$.getJSON(files+"message.php?action=view&load=initial&topic_id="+topic_id+"&username="+username+"&t=" + (new Date()), function(json) {  
            if(json.length) {
              for(i=0; i < json.length; i++) {
                  json.sort(function(a,b) { return parseFloat(a.timestamp) - parseFloat(b.timestamp) } );
                $('#message-list').prepend(prepare(json[i]));
                $('#list-' + count).fadeIn(1500);
              }

            }

          });

最佳答案

你有一个杂散的(和无与伦比的)</li>在这部分可能会丢掉你的标记:

+'</li>';

还有当您调用 .prepend() 时第一个未关闭<div>你会遇到问题......它不仅仅是添加 HTML 它正在制作 DOM 元素,所以你需要将整个 HTML 字符串放在一起然后 .prepend() 一次。

你可以进一步优化它,但基本的固定版本应该是这样的:

function prepare(response) {
  count++;
  //function in another doc
  var nicetime = handleDate(response.timestamp), string="";

  if (response.div=='start'){
    string = '<div id="chunk">start div';
  }

  string += list_name;
  string += '<span class="message-list-nick">'+response.message+'</span>';

  if (response.div=='end'){
   string += '</div>end div';
  }
  return string;
}

以及 ajax 调用:

$.getJSON(files+"script.php?action=view&load=initial&topic_id="+topic_id+"&username="+username+"&t=" + (new Date()), function(json) { 
  var output = "";
  for(i=0; i < json.length; i++) {
    json.sort(function(a,b) { return parseFloat(a.timestamp) - parseFloat(b.timestamp) } );

     output += prepare(json[i]);
     $('#list-' + count).fadeIn(1500);
  }
  $('#messagelist').prepend(output);
});

这里的重要区别是我们不会追加到 DOM 直到字符串完成...jQuery 将在调用 .prepend() 时立即(或尝试)完成元素。第一次。

关于jquery - 疑难的Jquery <div> 问题,求高手指教,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696518/

相关文章:

html - 将 Div 水平和垂直居中

html - 将 DIV 与绝对定位的子项水平对齐

javascript - 如何在 ng-repeat 中切换特定的 div 元素?

php - yii 和 jquery 移动

jquery - 使用 .data() 检索 data-* 属性的值是个好主意吗?

css - 使 flex 元素忽略子元素

javascript - EaselJs Canvas 拖拽事件未冒泡到父级

jquery - 如何将 jquery 移动按钮向下移动页面

javascript - Chrome 扩展 : the js script fires too early despite run_at: document_idle

一行 CSS,无法比较免费和付费主题文件