评论回复功能

比较简陋的评论回复功能,但我目前也只能做成这样了(哭泣)
关键代码如下:
html代码(参照了csdn的前端):

<div class="comment_box">
                <div class="comment_edit_box">
                    <div class="userimg">
                        <a href="#"><img class="tx" width="20px" height="20px" src="{{usertx}}" alt="头像" /></a>
                    </div>
                    <div class="form">
                        <textarea class="comment-content" name="comment_content" id="comment_content" placeholder="评论……" maxlength="1000"></textarea>
                        <div class="liuyan_btn_box"><input type="submit" class="btn" id="fabiaopinglun" value="发表评论"></div>
                    </div>
                    <div style="clear: both;"></div>
                </div>

                <div class="comment-list-container" style="display: block;">
                    <a id="comments"></a>
                    <div class="comment-list-box" id="comment-list-box">
                        <ul class="comment-list">
                            {% if comments %} {% for comment in comments %}
                            <li class="comment-line-box d-flex" data-commentid="{{comment.commentid}}" data-replyname="{{comment.username}}">
                                <div style="display: flex;width: 100%;">
                                    <a target="_blank" href="#"><img src="{{comment.usertx}}" username="{{comment.username}}" alt="" class="avatar1"></a>
                                    <div class="right-box">
                                        <div class="new-info-box clearfix">
                                            <a target="_blank" href="#">
                                                <span class="name ">{{comment.username}}</span>
                                            </a>
                                            <span class="colon">:</span>
                                            <span class="floor-num"></span>
                                            <span class="new-comment">{{comment.content}}</span>
                                            <span class="date" title="{{comment.commentdate}}">{{comment.commentdate}}</span>
                                            <span class="new-opt-floating">
                                                <a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>
                                            </span>
                                        </div>

                                    </div>
                                </div>
                            </li>

                            <li class="replay-box" id="huifulist" style="display:block">
                                <ul class="reply-comment-list">
                                    {% if dic[comment.commentid] %} {% for reply in dic[comment.commentid] %}
                                    <li class="comment-line-box d-flex" data-commentid="{{reply.commentid}}" data-replyname="{{reply.username}}">
                                        <div style="display: flex;width: 100%;">
                                            <a target="_blank" href="#">
                                                <img src="{{reply.usertx}}" username="{{reply.username}}" alt="" class="avatar1">
                                            </a>
                                            <div class="right-box ">
                                                <div class="new-info-box clearfix">
                                                    <a target="_blank" href="#">
                                                        <span class="name mr-8">{{reply.username}}</span>
                                                    </a>
                                                    <span class="text">回复</span><span class="nick-name">{{reply.isreplyname}}</span>
                                                    <span class="colon">:</span>
                                                    <span class="text"></span>
                                                    <span class="new-comment">{{reply.content}}</span>
                                                    <span class="date" title="{{reply.replydate}}">{{reply.replydate}}</span>
                                                    <span class="new-opt-floating"><a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>
                                                    </span>
                                                </div>
                                            </div>
                                        </div>
                                    </li>
                                    {% endfor %}{% endif %}
                                </ul>
                            </li>
                            {% endfor %} {% endif %}
                        </ul>

                    </div>


                </div>
            </div>

css样式

.comment_box {
            position: relative;
            width: inher;
            margin: auto;
        }
        
        .comment_edit_box {
            position: relative;
            margin-top: 2px;
        }
        
        .userimg {
            float: left;
        }
        
        .userimg img {
            width: 20px;
            height: 20px;
            border-radius: 50%;
            margin-top: 3px;
        }
        
        .comment-content {
            width: 80%;
            height: 40px;
            resize: none;
            margin-left: 2px;
            font-size: 16px;
            font-family: "微软雅黑";
            padding: 3px 3px;
            outline: none;
            border: none;
            border-radius: 5px;
            background: white;
        }
        
        .comment-content:focus {
            border-color: #84bffa;
            box-shadow: 0 0 10px #84bffa;
            background: white;
        }
        
        #reply_box {
            width: 600px;
            /* background: red; */
        }
        
        .liuyan_btn_box {
            width: 80%;
            margin-left: 22px;
        }
        
        .btn {
            display: block;
            float: right;
            width: 80px;
            height: 25px;
            border-radius: 20px;
            outline: none;
            color: white;
            background: #3a6ab5;
            border: none;
            cursor: pointer;
        }
        
        .btn1 {
            display: block;
            float: right;
            width: 80px;
            height: 25px;
            border-radius: 20px;
            outline: none;
            color: white;
            background: #3a6ab5;
            border: none;
            cursor: pointer;
            margin-right: 20px;
        }
        
        .comment-line-box {
            position: relative;
            margin-top: 3px;
            border-bottom: #cecece;
        }
        
        .comment-list .comment-line-box {
            padding: 3px 0;
            border-bottom: solid 1px rgb(226, 226, 226);
        }
        
        .replay-box .comment-list .comment-line-box {
            border-bottom: none;
        }
        
        .comment-line-box a {
            position: relative;
            width: 20px;
            height: 20px;
        }
        
        .avatar1 {
            width: 20px;
            height: 20px;
            border-radius: 50%;
        }
        
        .new-info-box {
            margin-left: 5px;
            line-height: 20px;
        }
        
        .new-info-box a {
            text-decoration: none;
        }
        
        .name {
            text-decoration: none;
            color: rgb(184, 184, 184);
        }
        
        .colon {
            color: rgb(184, 184, 184);
        }
        /* .new-comment {
            font-size: 13px;
        } */
        
        .date {
            margin-left: 5px;
            font-size: 12px;
            color: gainsboro;
        }
        
        .btn-reply {
            margin-left: 5px;
            color: rgb(122, 122, 201);
            cursor: pointer;
        }
        
        .replay-box {
            position: relative;
            margin-left: 20px;
            padding-left: 3px;
            border-left: solid 1px rgb(226, 226, 226);
        }
        
        .text {
            margin-left: 5px;
            margin-right: 5px;
            color: rgb(184, 184, 184);
        }
        
        .nick-name {
            color: rgb(184, 184, 184);
        }

script代码(这里用了ajax请求):

//添加评论
            $('#fabiaopinglun').click(function() {
                var commentcontent = $('#comment_content').val();

                if (commentcontent == "") {
                    alert("未输入内容");
                    return ""
                }
                var articleid = $('#articleid').text().trim();
                var userid = $('#userid').text().trim();
                $.ajax({
                    url: '/addcomment',
                    type: 'POST',
                    data: JSON.stringify({
                        'articleid': articleid,
                        'userid': userid,
                        'content': commentcontent
                    }),
                    success: function(data) {
                        // alert(data)
                        // alert(data['content'])
                        var str = '<ul class="comment-list">' +
                            '<li class="comment-line-box d-flex" data-commentid="' + data['commentid'] + '" data-replyname="回复名称">' +
                            '<div style="display: flex;width: 100%;">' +
                            '<a target="_blank" href="#">' +
                            '<img src="' + data['tx'] + '" username="' + data['username'] + '" alt="" class="avatar1">' +
                            '</a>' +
                            '<div class="right-box ">' +
                            '<div class="new-info-box clearfix">' +
                            '<a target="_blank" href="#">' +
                            '<span class="name ">' + data['username'] + '</span>' +
                            '</a>' +
                            '<span class="colon">:</span>' +
                            '<span class="new-comment">' + data['content'] + '</span>' +
                            '<span class="date" title="' + data['time'] + '">' + data['time'] + '</span>' +
                            '<span class="new-opt-floating">' +
                            '<a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>' +
                            '</span>' +
                            '</div>' +
                            '</div>' +
                            '</div>' +
                            '</li>' +
                            '</ul>'
                        $('#comment-list-box').prepend(str);
                        $('#comment_content').val("");
                    }
                })

            })

            $('.btn-bt').click(function() {
                // var articleid = $('#articleid').text().trim();

                // alert("点击了回复")
                var isreply = $('#isreply').val();
                if (isreply == "1") {
                    $('#reply_box').remove();
                    $('#isreply').val("0");
                }
                //添加输入框
                var div = $(this).parents(".right-box");
                var edit = '<div class="comment_edit_box" id="reply_box">' +
                    '<div class="userimg">' +
                    '<a href="#"><img class="tx" width="20px" height="20px" src="../../static/student/tx/default_touxiang.png" alt="头像" /></a>' +
                    '</div>' +
                    '<textarea class="comment-content" name="comment_content" id="comment_content" placeholder="评论……" maxlength="1000" ></textarea>' +
                    '<div class="liuyan_btn_box">' +
                    '<input type="submit" class="btn" id="fabiaopinglun" value="回复评论">' +
                    '</div>' +
                    '<div class="quxiao_box">' +
                    '<input type="submit" class="btn1" id="quxiao" value="取消回复">' +
                    '</div>' +
                    '<div style="clear: both;"></div>' +
                    '</div>';
                var row = $(edit);
                div.append(row);
                $('#isreply').val("1");
                $(row).find('#comment_content').focus(); //自动聚焦

                $(row).find('#fabiaopinglun').click(function() {
                    // alert("回复的确定按钮")

                    var ul = $(this).parents(".reply-comment-list");
                    if (ul.length === 0) {
                        var ali = $(this).parents('.comment-line-box');
                        var replyli = $(ali).next();
                        ul = $(replyli).find('.reply-comment-list');
                    }

                    var li = $(this).parents(".comment-line-box");
                    var commentid = $(li).attr('data-commentid');
                    var isreplyname = $(li).attr('data-replyname');
                    var content = $(li).find('#comment_content').val();
                    var userid = $('#userid').text().trim();
                    $.ajax({
                        url: '/addreply',
                        type: 'POST',
                        data: JSON.stringify({
                            'commentid': commentid,
                            'isreplyname': isreplyname,
                            'userid': userid,
                            'content': content
                        }),
                        success: function(data) {
                            var str = '<li class="comment-line-box d-flex" data-commentid="' + data["commentid"] + '" data-replyname="' + data["replyname"] + '">' +
                                '<div style="display: flex;width: 100%;">' +
                                '<a target="_blank" href="#">' +
                                '<img src="' + data["tx"] + '" username="' + data["replyname"] + '" alt="" class="avatar1">' +
                                '</a>' +
                                '<div class="right-box ">' +
                                '<div class="new-info-box clearfix">' +
                                '<a target="_blank" href="#">' +
                                '<span class="name mr-8">' + data["replyname"] + '</span>' +
                                '</a>' +
                                '<span class="text">回复</span><span class="nick-name">' + data["nickname"] + '</span>' +
                                '<span class="colon">:</span>' +
                                '<span class="text"></span>' +
                                '<span class="new-comment">' + data["content"] + '</span>' +
                                '<span class="date" title="' + data["time"] + '">' + data["time"] + '</span>' +
                                '<span class="new-opt-floating"><a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>' +
                                '</span>' +
                                '</div>' +
                                '</div>' +
                                '</div>' +
                                '</li>';
                            $(ul).prepend(str);
                            $(li).find('#reply_box').remove();
                        },
                        error: function(data) {
                            alert("错误" + data);
                        }
                    })
                })

                $(row).find('#quxiao').click(function() {
                    // alert("点击了取消");
                    $(this).parents("#reply_box").remove();
                });

                $(row).find('#reply_box').blur(function() {
                    $(this).parents("#reply_box").remove();
                })
            })

两个单纯得结合一下:

<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style  type="text/css">
.comment_box {
            position: relative;
            width: inher;
            margin: auto;
        }
        
        .comment_edit_box {
            position: relative;
            margin-top: 2px;
        }
        
        .userimg {
            float: left;
        }
        
        .userimg img {
            width: 20px;
            height: 20px;
            border-radius: 50%;
            margin-top: 3px;
        }
        
        .comment-content {
            width: 80%;
            height: 40px;
            resize: none;
            margin-left: 2px;
            font-size: 16px;
            font-family: "微软雅黑";
            padding: 3px 3px;
            outline: none;
            border: none;
            border-radius: 5px;
            background: white;
        }
        
        .comment-content:focus {
            border-color: #84bffa;
            box-shadow: 0 0 10px #84bffa;
            background: white;
        }
        
        #reply_box {
            width: 600px;
            /* background: red; */
        }
        
        .liuyan_btn_box {
            width: 80%;
            margin-left: 22px;
        }
        
        .btn {
            display: block;
            float: right;
            width: 80px;
            height: 25px;
            border-radius: 20px;
            outline: none;
            color: white;
            background: #3a6ab5;
            border: none;
            cursor: pointer;
        }
        
        .btn1 {
            display: block;
            float: right;
            width: 80px;
            height: 25px;
            border-radius: 20px;
            outline: none;
            color: white;
            background: #3a6ab5;
            border: none;
            cursor: pointer;
            margin-right: 20px;
        }
        
        .comment-line-box {
            position: relative;
            margin-top: 3px;
            border-bottom: #cecece;
        }
        
        .comment-list .comment-line-box {
            padding: 3px 0;
            border-bottom: solid 1px rgb(226, 226, 226);
        }
        
        .replay-box .comment-list .comment-line-box {
            border-bottom: none;
        }
        
        .comment-line-box a {
            position: relative;
            width: 20px;
            height: 20px;
        }
        
        .avatar1 {
            width: 20px;
            height: 20px;
            border-radius: 50%;
        }
        
        .new-info-box {
            margin-left: 5px;
            line-height: 20px;
        }
        
        .new-info-box a {
            text-decoration: none;
        }
        
        .name {
            text-decoration: none;
            color: rgb(184, 184, 184);
        }
        
        .colon {
            color: rgb(184, 184, 184);
        }
        /* .new-comment {
            font-size: 13px;
        } */
        
        .date {
            margin-left: 5px;
            font-size: 12px;
            color: gainsboro;
        }
        
        .btn-reply {
            margin-left: 5px;
            color: rgb(122, 122, 201);
            cursor: pointer;
        }
        
        .replay-box {
            position: relative;
            margin-left: 20px;
            padding-left: 3px;
            border-left: solid 1px rgb(226, 226, 226);
        }
        
        .text {
            margin-left: 5px;
            margin-right: 5px;
            color: rgb(184, 184, 184);
        }
        
        .nick-name {
            color: rgb(184, 184, 184);
        }
</style>
</head>

<body>
	<div class="comment_box">
                <div class="comment_edit_box">
                    <div class="userimg">
                        <a href="#"><img class="tx" width="20px" height="20px" src="{{usertx}}" alt="头像" /></a>
                    </div>
                    <div class="form">
                        <textarea class="comment-content" name="comment_content" id="comment_content" placeholder="评论……" maxlength="1000"></textarea>
                        <div class="liuyan_btn_box"><input type="submit" class="btn" id="fabiaopinglun" value="发表评论"></div>
                    </div>
                    <div style="clear: both;"></div>
                </div>

                <div class="comment-list-container" style="display: block;">
                    <a id="comments"></a>
                    <div class="comment-list-box" id="comment-list-box">
                        <ul class="comment-list">
                            {% if comments %} {% for comment in comments %}
                            <li class="comment-line-box d-flex" data-commentid="{{comment.commentid}}" data-replyname="{{comment.username}}">
                                <div style="display: flex;width: 100%;">
                                    <a target="_blank" href="#"><img src="{{comment.usertx}}" username="{{comment.username}}" alt="" class="avatar1"></a>
                                    <div class="right-box">
                                        <div class="new-info-box clearfix">
                                            <a target="_blank" href="#">
                                                <span class="name ">{{comment.username}}</span>
                                            </a>
                                            <span class="colon">:</span>
                                            <span class="floor-num"></span>
                                            <span class="new-comment">{{comment.content}}</span>
                                            <span class="date" title="{{comment.commentdate}}">{{comment.commentdate}}</span>
                                            <span class="new-opt-floating">
                                                <a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>
                                            </span>
                                        </div>

                                    </div>
                                </div>
                            </li>

                            <li class="replay-box" id="huifulist" style="display:block">
                                <ul class="reply-comment-list">
                                    {% if dic[comment.commentid] %} {% for reply in dic[comment.commentid] %}
                                    <li class="comment-line-box d-flex" data-commentid="{{reply.commentid}}" data-replyname="{{reply.username}}">
                                        <div style="display: flex;width: 100%;">
                                            <a target="_blank" href="#">
                                                <img src="{{reply.usertx}}" username="{{reply.username}}" alt="" class="avatar1">
                                            </a>
                                            <div class="right-box ">
                                                <div class="new-info-box clearfix">
                                                    <a target="_blank" href="#">
                                                        <span class="name mr-8">{{reply.username}}</span>
                                                    </a>
                                                    <span class="text">回复</span><span class="nick-name">{{reply.isreplyname}}</span>
                                                    <span class="colon">:</span>
                                                    <span class="text"></span>
                                                    <span class="new-comment">{{reply.content}}</span>
                                                    <span class="date" title="{{reply.replydate}}">{{reply.replydate}}</span>
                                                    <span class="new-opt-floating"><a class="btn-bt  btn-reply" data-type="reply" data-flag="true">回复</a>
                                                    </span>
                                                </div>
                                            </div>
                                        </div>
                                    </li>
                                    {% endfor %}{% endif %}
                                </ul>
                            </li>
                            {% endfor %} {% endif %}
                        </ul>

                    </div>


                </div>
            </div>
</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值