判断元素是不是存在

Posted

技术标签:

【中文标题】判断元素是不是存在【英文标题】:Determine if an element is exists判断元素是否存在 【发布时间】:2011-11-02 10:03:51 【问题描述】:

我正在为 Web 应用程序创建评论系统,当用户点击评论图像时加载 cmets,使用 json 动态生成 html 代码以显示 cmets。 但是当再次点击图片时,再次发出请求,用相同的数据填充页面

这是我的代码

function latest_pheeds() 
    var action = url+"pheeds/latest_pheeds";
    $.getJSON(action,function(data) 
        $.each(data,function(index,item) 
            $('#pheed-stream').append
            (
            '<div class="pheed" id="'+item.pheed_id+'">'+
            '<p><a href="">'+item.user_id+'</a></p>'+
            '<p>'+item.pheed+'</p>'+
            '<div class="pheed_meta">'+
            '<span>'+item.datetime+' Ago</span>'+
            '<span>'+item.comments+
            '<img class="comment_trigger" src="/pheedbak/assets/img/comment.png" title="Click to comment on pheed" onclick="retrieve_comments('+item.pheed_id+')">'+
            '</span>'+
            '</div>'+
            '</div>'
            );
        );
    );




function retrieve_comments(pheed_id) 
    var action = url+'comments/get_comments';
    var crsf =  $('input[name=ci_csrf_token]').val();
    var dataString = "pheed_id="+pheed_id+"&ci_csrf_token="+crsf;
    $.ajax(
        url:action,
        type:'POST',
        cache:false,
        dataType:'json',
        data:dataString,
        success:function(data) 
            $.each(data,function(index,item) 
                $("#" + pheed_id).append(
                '<div class="pheed_comments">'+
                    '<div class="comment">'
                    +'<span><p>'+item.user+'</p></span>'
                     +item.comment+
                    '</div>'+
                '</div>'+
                '<div id="comment_box">'+
                    '<textarea id="comment" cols="30">'+
                    '</textarea><br>'+
                    '<input type="button" class="submit_btn" value="comment" />'+
                '</div>'
                );
            );
        
    );

latest_pheeds() 加载 pheeds,retrieve_cmets 获取传递给它的 pheed_id 的 cmets。 我如何确定评论区域是否已被填充,如果可用,则使用新的 cmets 对其进行更新。谢谢

【问题讨论】:

【参考方案1】:

检查

$("#" + pheed_id +' .pheed_comments').length

如果元素(我猜你的意思是div.pheed_comments)不存在,if 将为 0。

【讨论】:

【参考方案2】:

几个选择:

1) 如果您已经从 ajax 调用中获得了所有 cmets,那么只需从 DOM 中删除您之前拥有的 cmets 并插入您刚刚获得的所有内容。

2) 如果您有一个 ajax 调用可以只检索新的 cmets,那么您可以检查 DOM 以查看 DOM 中是否已经有 cmets,然后在某个令牌及时请求新的 cmets(您以前会保存)。当您收到新的 cmets 时,您会将它们附加到您拥有的内容中。

$('#pheed-stream').children().length 将告诉您在 pheed-stream 层次结构中有多少孩子。如果那是零,你还没有做任何 pheeds。

我建议只检索所有 cmets 并用新的 cmets 列表替换您拥有的所有内容可能比尝试仅检索新 cmets 更简单。仅检索新的 cmets 需要某种时间令牌,您可以将其提供给服务器,以便它知道要给您哪些“新 cmets”。

$("#" + pheed_id + " .pheed_comments").length 将告诉您是否已为该 pheed_id 检索到任何 cmets。

【讨论】:

【参考方案3】:

您正在添加带有 id 的 div。只需检查它是否存在。如果是,则更新它,否则插入。

【讨论】:

以上是关于判断元素是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎么判断页面中是不是存在某元素

WebDriver(Selenium2)判断元素是不是存在。

jquery怎么判断是不是有某个元素

jquery怎么判断是不是有某个子元素

js如何判断光标是不是在某元素上

js判断元素是不是存在某个属性