js模拟回帖/微博评论功能案例

  • 学习目的:实现在dom上的增删操作;
  • 案例:模拟回帖/微博评论功能案例;


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>评论回复</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        #box {
            width: 800px;
            border: 1px solid #cccccc;
            margin: 100px auto;
            padding: 30px;
        }

        #my_textarea {
            width: 80%;
            height: 150px;
        }

        .box-top {
            margin-bottom: 30px;
        }

        #reply {
            margin: 0 80px;
        }

        #reply li {
            border-bottom: 1px dashed #cccccc;
            color: red;
            line-height: 44px;
        }

        #reply li a {
            float: right;
        }
    </style>
</head>
<body>
<div id="box">
    <div class="box-top">
        <label>发表评论:</label>
        <textarea id="my_textarea"></textarea>
        <button id="comment">发表</button>
    </div>
    <ul id="reply">
    </ul>
</div>
<script>
    window.onload = function () {
        //封装id获取操作
        function $(id) {
            return typeof id === "string" ? document.getElementById(id) : null;
        }

        //发表按钮点击
        $("comment").onclick = function () {
            //获取输入的内容
            var content = $("my_textarea").value;
            //判断为空
            if (content.length === 0) {
                alert("请输入评论的内容!");
                return;
            } else {
                var li = document.createElement("li");
                li.innerHTML = content + '<a href = "Javascript:;">删除</a>';//动态处理a标签
                $("reply").appendChild(li);//在ul中添加li
                //清除输入框
                $("my_textarea").value = "";
            }

            //删除操作
            //获取li中所有链接a元素
            var liList = $("reply").getElementsByTagName("a");
            //遍历拿到每个"删除"标签
            for (var i = 0; i < liList.length; i++) {
                var a = liList[i];
                a.onclick = function () {
                    //删除父元素li
                    this.parentNode.remove();
                }
            }
        }
    }
</script>
</body>
</html>

可以注意到此时删除操作是在发表操作的区域块中的


在案例过程中,我一开始把删除评论操作发表评论操作并列的放在一起,因为我觉得这是两个独立的地位相等的操作.
但是执行起来,删除操作并没有效果,原因是在发表操作区域中添加的li元素在删除区域中获取不到,评论的次数决定了删除的个数,决定了遍历数组的长度,如果在删除操作之前就结束了代码块,作用域是传不到删除操作代码块中的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,235评论 25 709
  • 我是喜欢你的 时光是一位苍老的巫婆 沧桑而且平凡 这次她只用一个词 就控制了我灵魂 这个词 名为思念 这越饮越...
    贾立坤阅读 2,507评论 1 4

友情链接更多精彩内容