js+css+html制作简易留言板

news2025/1/21 2:53:47

js+css+html制作简易留言板

  • 1 案例说明
  • 2 编写HTML代码
  • 3 编写css代码
  • 4 编写JavaScript代码
  • 5 全部代码

1 案例说明

利用JavaScript、css以及html制作简易留言板,也可以看作是简易评论区。

要求在页面文本框中输入一些文字之后,点击“发布”按钮,就可以让输入的文字显示在下面,重新输入一些文字,再点击发布,就可以让新发布的内容显示在最上面。点击后面的删除,就可以删除已经发布的文字。

【案例分析】利用节点的创建、添加和删除相关知识完成一个简易的留言板功能。在页面中实现单击“发布”按钮动态创建一个li元素,添加到ul里面。

效果图:
在这里插入图片描述
点击发布之后:
在这里插入图片描述
再输入一行文字:
在这里插入图片描述
点击发布:
在这里插入图片描述
点击最下面的那一条删除之后:
在这里插入图片描述

2 编写HTML代码

在HTML页面中的元素比较简单,需要一个<textarea>标签,用来输入留言,一个<button>标签,用来发表留言,以及一个<ul>标签,用来显示留言的内容。

    <textarea></textarea>
    <button>发布</button>
    <ul></ul>

在这里插入图片描述

3 编写css代码

CSS代码主要对留言板的样式进行一些设置。首先让页面中的外边距和内边距都为0,让留言板靠中心移动一些。

    * {
        margin: 0;
        padding: 0;
    }
    body {
        padding: 100px;
    }

在这里插入图片描述
接着设置输入框的属性,设置宽高、边框颜色,轮廓样式以及是否可以改变大小。轮廓就是当<textarea>聚焦时出现的黑色的边框。

    textarea {
        width: 200px;
        height: 100px;
        border: 1px pink solid;
        /* 不设置轮廓 */
        outline: none;
        /* 设置其不能改变长宽 */
        resize: none;
    }

设置评论li的样式。这部分设置到现在是看不出效果的,因为目前还没有评论,需要在设置完JavaScript之后搭配动态效果才可以。设置评论的宽度,内边距,背景色,字体大小,外边距,为了让评论更加的好看。

    li {
        width: 300px;
        padding: 5px;
        background-color: #eee;
        font-size: 15px;
        margin: 15px 0;
    }

设置删除的样式。删除使用a标签来设置,将其向右浮动。

    li a {
        float: right;
    }

4 编写JavaScript代码

在JavaScript部分中,需要为按钮绑定事件。当点击按钮时,如果文本框内没有文字,则弹出提示;如果有文字,则将该文字添加到下方的ul的li中,因此这个过程中需要添加li,并且添加a标签作删除功能,点击删除时删除该li元素。

        //1、获取元素
        var txt = document.querySelector("textarea");
        var btn = document.querySelector("button");
        var ul = document.querySelector("ul");
        //2、给button绑定点击事件
        btn.onclick = function () {
            if (txt.value == "") {//当文本框中没有文字时,提示
                alert("您没有输入内容")
            } else {
                //创建元素li作为留言区
                var li = document.createElement("li");
                //将文本框中的内容放到li中,a标签中href中的内容代表什么都不执行
                li.innerHTML = txt.value + "<a href='javascript:;'>删除</a>"
                txt.value = "";//添加之后文本框的内容清空
                //将留言添加到ul中,而且在最上方
                ul.insertBefore(li, ul.children[0]);
                //当点击删除时删除ul中的li
                var as = document.querySelectorAll("a");
                //循环给每个删除绑定事件
                for (var i = 0; i < as.length; i++) {
                    as[i].onclick = function () {
                        //删除当前a标签所在位置的父节点li
                        ul.removeChild(this.parentNode);
                    }
                }
            }
        }

5 全部代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    body {
        padding: 100px;
    }

    textarea {
        width: 200px;
        height: 100px;
        border: 1px pink solid;
        /* 不设置轮廓 */
        outline: none;
        /* 设置其不能改变长宽 */
        resize: none;
    }

    li {
        width: 300px;
        padding: 5px;
        background-color: #eee;
        font-size: 15px;
        margin: 15px 0;
    }

    li a {
        float: right;
    }
</style>

<body>
    <textarea></textarea>
    <button>发布</button>
    <ul></ul>
    <script>
        //1、获取元素
        var txt = document.querySelector("textarea");
        var btn = document.querySelector("button");
        var ul = document.querySelector("ul");
        //2、给button绑定点击事件
        btn.onclick = function () {
            if (txt.value == "") {//当文本框中没有文字时,提示
                alert("您没有输入内容")
            } else {
                //创建元素li作为留言区
                var li = document.createElement("li");
                //将文本框中的内容放到li中,a标签中href中的内容代表什么都不执行
                li.innerHTML = txt.value + "<a href='javascript:;'>删除</a>"
                txt.value = "";//添加之后文本框的内容清空
                //将留言添加到ul中,而且在最上方
                ul.insertBefore(li, ul.children[0]);
                //当点击删除时删除ul中的li
                var as = document.querySelectorAll("a");
                //循环给每个删除绑定事件
                for (var i = 0; i < as.length; i++) {
                    as[i].onclick = function () {
                        //删除当前a标签所在位置的父节点li
                        ul.removeChild(this.parentNode);
                    }
                }
            }
        }
    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端element-ui组件库el-card卡片【hover效果与点击事件(点击无效用@click.native=““)解决】

&#x1f680;作者简介 主页&#xff1a;水香木鱼的博客 专栏&#xff1a;后台管理系统 能量&#xff1a;&#x1f50b;容量已消耗1%&#xff0c;自动充电中… 笺言&#xff1a;用博客记录每一次成长&#xff0c;书写五彩人生。 &#x1f4d2;技术聊斋 &#xff08;1&#…

直面JavaScript数据处理的5个常见疑难杂症

前言 随着前端技术的不断发展&#xff0c;前端工作需要展示的界面越来越复杂&#xff0c;因此数据处理的场景越来越多&#xff0c;例如&#xff1a;后台管理系统中常常需要展示一个树状结构&#xff0c;后台返回的前端的数据是平级结构&#xff0c;这时候需要我们把数据转成树结…

进阶版JavaScript学习【第二期】

距离上一期更新已经过了好久&#xff0c;非常抱歉。因为自己的一些原因&#xff0c;没有能够及时更新。 博主主页&#xff1a;GUIDM的主页 专栏内容&#xff1a;进阶版JavaScript学习 往期内容&#xff1a;第一期 给大家安利一个刷题神器&#xff1a;牛客网 JavaScript系列刷题…

Vue使用Element-UI实现分页效果

前言 分页在展示数据列表的场景肯定是非常多的。 一般的项目开发中&#xff0c;数据量特别大&#xff0c;一般都是后端接口直接处理分页返回&#xff0c;前端直接调用即可。 但是前端也是可以不需要借助后端&#xff0c;自己也是可以处理分页的。今天我这个后端开发就站在前…

H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例&#xff1a;在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 6. 绘制矩形 rect 7. 绘制圆形 arc 8. 案例&#xff1a;根据一组数据绘制饼状图 1. canvas 简介 canvas 是HTML5 提供的一…

【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会

目录 前言 一、相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二、蓝桥杯 1.应该参加蓝桥杯吗&#xff1f; 2.如何进行蓝桥杯的准备 三.蓝桥杯模拟赛二期web组真题 1.凭空消失的TA&#xff08;简单&a…

node-sass安装失败解决方法,终有一款适合我们

项目中常常遇到node-sass安装失败&#xff0c;动不动就是报各种错误。以前我一次也没有失败过&#xff0c;自从系统重装我的天呀&#xff0c;node-sass就没有成功过&#xff0c;我能做的node卸载&#xff0c;sass重装各种版&#xff0c;以及换了淘宝镜像和用了vpn都安装失败。我…

Vue--Router--解决多路由复用同一组件页面不刷新问题

原文网址&#xff1a;Vue--Router--解决多路由复用同一组件页面不刷新问题_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何解决Vue的多路由复用同一组件页面不刷新问题。 多路由复用同一组件的场景 多路由使用同一组件 比如&#xff1a;添加博客&#xff08;path为&…

H5如何实现唤起APP

前言 写过hybrid的同学&#xff0c;想必都会遇到这样的需求&#xff0c;如果用户安装了自己的APP&#xff0c;就打开APP或跳转到APP内某个页面&#xff0c;如果没安装则引导用户到对应页面或应用商店下载。这里就涉及到了H5与Native之间的交互&#xff0c;为什么H5能够唤起APP…

【简陋Web应用3】实现人脸比对

文章目录&#x1f349; 前情提要&#x1f337; 效果演示&#x1f95d; 实现过程1. utils.py2. compare.html3. forms.py4. insightface_api.py5. app.py&#x1f345; 记录1. Bugs1.1 cv2.imshow()报错1.2 insightface人脸检测标注框错乱(&#x1f4a2;)2. 杂记&#x1f33e; 小…

给el-table-column添加指定列的点击事件该怎么做

嗨害嗨&#xff0c;我又来了奥。大家在工作中用组件吗&#xff1f;elementUI应该都用过吧&#xff0c; element是一套UI组件库,是由国内饿了么团队开发的。它提供了丰富的PC组件,有效地降低了使用者的开发难度。 如果工作中遇到了表格&#xff0c;我们经常会用el-table组件来写…

微信小程序 slot插槽基本使用

文章目录前言一、基本插槽二、具名插槽三、样式:hoststyleIsolation可控化样式隔离externalClasses外部样式类使用页面/父组件的样式总结前言 小程序中, 如果插槽有必要拿到父组件的数据来展示, 直接父传子即可, 和Vue一样的思路 一、基本插槽 参考Vue的基本插槽, 两者的使用…

初入微前端---qiankun学习这一篇就够了,并在vite中使用qiankun

目录 原因 Why Not iframe&#xff1f; qiankun 使用qiankun部署项目 在子路由的页面去暴露根元素 Create-react-app 子应用 在vite中使用qiankun 方法一&#xff08;不太推荐&#xff09;&#xff1a; 方法二&#xff08;推荐&#xff09;&#xff1a; 安装插件 修…

vue2双向数据绑定基本原理

vue2的双向数据绑定(又称响应式)原理&#xff0c;是通过数据劫持结合发布订阅模式的方式来实现的&#xff0c;通过Object.defineProperty()来劫持各个属性的setter&#xff0c;getter&#xff0c;在数据变动时发布消息给订阅者&#xff0c;触发相应的监听回调来渲染视图。也就是…

vue3+vite项目,安装依赖运行报错“failed to load config from xxx,TypeError: vite.createFilter is not a function”

问题 今天从GitHub上拉下来了一个vue3vite项目&#xff0c;之前就是安装依赖就可以运行了&#xff0c;但是今天一直报错&#xff0c;显示TypeError: vite.createFilter is not a function 错误原因 vite版本与安装的依赖版本不匹配 近期vite3发布&#xff0c;但我们使用的…

node-sass版本不兼容问题(已解决)

node-sass版本不兼容问题&#xff08;已解决&#xff09; 估计很多小伙伴都遇到node-sass版本不兼容的问题&#xff0c;今天分享给大家如何定位问题&#xff0c;怎样去查找并兼容自己项目中的nod-sass版本&#xff01; 文章目录node-sass版本不兼容问题&#xff08;已解决&…

JavaScript之Ajax-axios表单提交

目录 一.表单概念 二.表单提交 三.FormData语法 四.头像上传模板 五.请求体类型 六.图书管理(增删改查) 七.axios语法优化写法 优化1: axios全局配置 优化2: 默认的method 优化3: axios的快捷方法 一.表单概念 form标签&#xff08;表单&#xff09;是用来收集用户…

JavaWeb《一》概念、服务器部署及servlet

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 本文是javaweb的第一篇&#xff0c;首先介绍了javaweb&#xff0c;然后进行了一个简单的web服务器部署&#xff0c;把我的一个网页发布到了云端&#xff0c;且叫他小Sa&#xff0c;目前啥也没有&#xff0c;之后会使…

vue3插槽、具名插槽、作用域插槽-足够入门了!

vue3 插槽 前言 这篇文章介绍vue组件的插槽&#xff01;包括&#xff1a;插槽概念&#xff0c;具名插槽&#xff0c;作用域插槽等等&#xff0c;看完不会你打我。哈哈哈&#xff0c;开玩笑的&#xff0c;不多说&#xff0c;上刺刀&#xff01;&#xff01; 1. 概念 插槽&…

给饿了么Radio 单选框添加点击事件(vue2)

前言 最近有一个这样的需求&#xff0c;当点击不合格时打开一个弹窗进行不合格数据的录入。问题点在于当你想对不合格数据进行修改时&#xff0c;点击不合格是没有反应的&#xff1b;因为Radio 单选框只提供了一个change 事件 解决 这里说明一下&#xff0c;项目是vue2的项目…