我想做一个类似的
我现在的代码是
$("dl>.view_comment").toggle(function(){
var comment=$(this);
var id=$(this).parent().children("dt").children("span").text();
alert($(this).next().html());
if($(this).next().html()==null){
alert("空的");
$.ajax({
type:"GET",
url:"comment/"+id+".xml",
dateType:"xml",
success:function(data){
$(data).find("comment").each(function(){
var name=$(this).children("name").text();
var time=$(this).children("time").text();
var content=$(this).children("content").text();
var html="<dd class=\"comment\">"+name+"   "+time+"   "+content+"</dd>";
$(comment).append(html);
});
},
error:function(){
alert("error");
}
});
}
$(this).nextAll("dd").slideDown();
},第一次点击,加载评论 显示出来 
第二次点击,收缩回去我现在的问题是,
第一次点击  可以正常查询显示。
但点第二次不能收缩回去。然后再点一次,又会查询一次,这样评论就显示重复了。我希望的效果是和新浪微博的一样的,
第一次点击  查询评论并显示
第二次点击 收缩评论
第三次再点击,就直接显示,不要再通过ajax查询了。
该怎么弄呢?
我的问题出在哪儿?
各位高手指教指教。

解决方案 »

  1.   

    把你第一次查询得到的内容保存起来,点击时先判断保存,为空就ajax,否则就直接innerHTML已经保存的内容。你这是简单的需求,复杂点的先要把第一次查询到的所有XML节点信息保存在表中(一般json格式“{}”),
    点击判断表空就ajax,否则对已有的节点树进行递归解析,再innerHTML。
      

  2.   

    用到的是jquery中的toggle函数,奇偶事件
      

  3.   


    嗯  这我知道 
    我也是这样写的
    我写的是
    toggle(function(){
    //请求评论并显示
    },
    function(){
    //隐藏评论
    });但现在的问题是。  当第三次点击的时候,还会再请求一遍 。这样评论就重复了。。
    我希望点击的时候先判断评论是否已经加载  如果没有加载  再去请求 否则直接显示。开始想过第一次请求评论后,把内容存在一个变量里,每次判断这个变量是否为空。
    但是  我一个页面有很多篇文章 ,
    这样的话 就需要很多变量,,这个变量刚怎么设置呢?。
      

  4.   

    问题已解决
    $(".view_comment").toggle(function(){
    //查看评论
    var dl=$(this).next();
    var comments=$(this).next().children();
    var id=$(this).parent().parent().attr("id");
    if(comments.length>0){
    //已经请求过评论内容,不再通过ajax请求
    }
    else{
    //没有请求过评论内容
    $.ajax({
    type:"POST",
    url:"comment/"+id+".xml",
    dateType:"xml",
    error:function(){
    $("<dd>没有评论</dd>").appendTo(dl);
    },
    success:function(data){
    $(data).find("comment").each(function(){
    var name=$(this).children("name").text();
    var time=$(this).children("time").text();
    var content=$(this).children("content").text();
    var html=$("<dd>"+name+"   "+"time"+"   "+content+"</dd>");
    $(html).appendTo(dl);
    });
    }
    });
    }
    $(this).next().slideDown();
    },
    function(){
    //收缩评论
    $(this).next().slideUp();
    });
      

  5.   

    评论内容不用保存到一个变量中 
    只需要判断评论元素是否存在就可以了
    var comments=$("dl").children();if(comments.length>0){
    //dl元素存在子元素,即评论存在
    }