采用面向对象的方法来实现留言板的添加和删除功能
添加功能思路:使用空数组 ---创建对象---追加到数组中---最后调用一个重载函数(专门根据数组来拼接成页面结构到页面中)
删除功能思路:使用filter函数,将数组中的时间戳time值进行相比较,把与点击时的时间戳不相等的过滤出来。最后在使用重载函数,进行刷新页面即可。
若在拼接的字符串中添加一个点击事件来进行删除的时候,会出现一个小问题:会报错del is not defined .
其原因在于在拼接字符串结构中的方法必须是全局变量
解决方法有两种:
方法1:将del定义为全局函数----给window增加一个del属性,再将函数变成箭头函数就可以获取到外部的对象
<!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><body><input type="text" id="ipt" /><input type="button" id="btn" value="发布" /><ul id="list"></ul><script>function TodoList() {//属性/* 1、准备一个数组保存所有的信息 */this.dataArr = [];//获取需要用的元素this.sendBtn = document.querySelector("#btn");this.ipt = document.querySelector("#ipt");this.list = document.querySelector("#list");//方法/* 2、给发布按钮添加点击事件 */this.sendFn = function() {//点击的时候获取输入框的值--创建一个对象{content:"输入框的值",time:Date.now()}this.sendBtn.onclick = () => {let content = this.ipt.value;let obj = {content,time: Date.now(),};this.dataArr.push(obj);this.loadList();};};/* 3、封装一个函数loadList 根据数组 拼接成页面结构给ul */this.loadList = function() {let html = "";this.dataArr.forEach((obj) => {html += `<li><p>${obj.content}</p><span>${obj.time}</span><button onclick="del(${obj.time})">删除</button></li> `;});console.log(html);this.list.innerHTML = html;//清除输入框的内容this.ipt.value = "";};/* 4、实现删除功能 *///法1:window.del = (time) => {// console.log("aaa");console.log(this); //此处的this指的是window,要想指向外面的对象,将函数变成箭头函数即可this.dataArr = this.dataArr.filter((v) => v.time != time);this.loadList();};//此处直接写del()
//报错:del is not denfined 原因:拼接的字符串结构中的onclik="del()"这个函数必须是全局变量/* 解决方法:法1:将del定义为全局函数 给window增加一个del属性法2:不通过拼接字符串给字符删除功能--通过获取所有的删除按钮-遍历-添加点击事件*/this.sendFn();}let todo = new TodoList();</script>
</body></html>
方法2:不采用字符串拼接的方法,通过获取所有的删除按钮---遍历---添加点击事件
首先在删除方法内部获取到所有的删除按钮,然后遍历所有按钮,进行添加点击事件。在生成的类表的时候给button增加自定义属性 用来保存time(也就是自己定义一个新的类名)
<!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><body><input type="text" id="ipt" /><input type="button" id="btn" value="发布" /><ul id="list"></ul><!-- --><script>function TodoList() {/* 1、准备一个数组保存所有的信息 */this.dataArr = [];//获取需要用的元素this.sendBtn = document.querySelector("#btn");this.ipt = document.querySelector("#ipt");this.list = document.querySelector("#list");/* 2、给发布按钮添加点击事件 */this.sendFn = function() {//点击的时候获取输入框的值--创建一个对象{content:"输入框的值",time:Date.now()}this.sendBtn.onclick = () => {let content = this.ipt.value;let obj = {content,time: Date.now(),};this.dataArr.push(obj);this.loadList();};};/* 3、封装一个函数loadList 根据数组 拼接成页面结构给ul */this.loadList = function() {let html = "";this.dataArr.forEach((obj) => {html += `<li><p>${obj.content}</p><span>${obj.time}</span><button class="del-btn" data-time="${obj.time}">删除</button></li> `;});console.log(html);this.list.innerHTML = html;//清空输入框的内容this.ipt.value = "";//只有拼接完字符串--给ul之后,页面中才有删除按钮this.delFn();};/* 4、实现删除功能 *///法2://方法内部 获取所有的删除按钮--添加点击事件//注:必须在loadList最后调用,还要在生成类表的时候给button增加自定义属性 存timethis.delFn = function() {let delBtns = document.querySelectorAll(".del-btn");console.log(delBtns);//遍历每一个按钮delBtns.forEach((btn) => {btn.onclick = () => {//console.log(btn);//console.log("点击了按钮");//获取time---过滤数组---loadListlet time = btn.getAttribute("data-time");console.log(time);this.dataArr = this.dataArr.filter((v) => v.time != time);this.loadList();};});};this.sendFn();
// this.delFn();一开始就给删除按钮添加功能,页面打开的时候是没有删除按钮的--获取不到删除按钮}let todo = new TodoList();</script>
</body></html>
采用面向对象的方法来实现留言板的添加和删除功能相关推荐
- 使用vueaxios请求的get方式实现留言评论的添加,删除功能
实现样式 axios请求 axios.get(url, {params: {key: value} }).then( res => {console.log(res.data) })axios. ...
- php 删除相对应的id,PHP 在下面这个留言板代码中加入删除按钮,每一个删除按钮删除相对应一行数据,这怎么弄...
匿名用户 1级 2014-07-15 回答 看看这样如何,其中response_foo.php为响应页, 可以写到每一行中间 追问: 不是啊 我想要点一个删除 那一行的数据全部没有 我这个是循环留言板 ...
- JS数组方法汇总 array数组元素的添加和删除
2019独角兽企业重金招聘Python工程师标准>>> unshift:将参数添加到原数组开头,并返回数组的长度 pop:删除原数组最后一项,并返回删除元素的值:如果数组为空则返回u ...
- 系统设计知识:面向对象设计方法介绍
面向对象设计(Object Oriented Design,OOD)是面向对象分析(OOA)方法的延续,是在OOA模型的基础上,采用面向对象的方法,主要解决与实现相关的问题,最终目标是产生一个符号具体 ...
- vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能
本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...
- 【Nodejs】留言板案例
文章目录 1 统一处理服务器资源: 1.1 关于fs.readdir() 文件目录读取: 1.2 模板引擎: 1.2.1 在node中使用模板引擎: 1.2.2 each : 2 留言板: 2.1 实 ...
- 基于jsp+sevlet+mysql实现留言板
基于jsp+sevlet+mysql实现留言板 一.系统介绍 二.功能展示 1.用户登陆 2.用户注册 3.留言信息 4.添加留言 三.获取源码 一.系统介绍 系统主要功能: 用户登陆.用户注册.留言 ...
- php 审核功能,随缘网络PHP留言板(带审核功能)
经过一些时间的努力,随缘网络PHP留言板V1.0(带审核功能)总算正式发布了,该留言系统采用PHP+MYSQL编写,界面色调风格延续之前asp版留言系统简洁浅蓝色风格,稍有所变动.希望大家能够喜欢.初 ...
- php留言板带审核,随缘网络PHP留言板(带审核功能) v1.0 build 091017
经过一些时间的努力,随缘网络PHP留言板V1.0(带审核功能)总算正式发布了,该留言系统采用PHP+MYSQL编写,界面色调风格延续之前asp版留言系统简洁浅蓝色风格,稍有所变动.希望大家能够喜欢.初 ...
最新文章
- wps临时文件不自动删除_win10系统下wps残留文件无法删除如何解决
- 如何从Spring官网中下载完整的jar包(包含5.2.9版本最新版详解,当然所有版本均可下载)
- php 元素插入数组指定位置,数组任意位置插入元素,删除特定元素的实例
- leetcode617. 合并二叉树(dfs)
- 专访商汤联合创始人林达华:商汤的开源战略,从算法做起
- Tracepro 中LED光源模型建立(英文
- 2022年山东省安全员A证考试模拟100题及在线模拟考试
- PHP 微信公众号发送红包
- 获取股票历史数据(2)——数据保存/数据可视化
- 你应该看得懂的RecyclerView嵌套
- mysql替换空行解决导出到excel时由于内容有换行回车导致的问题
- EasyNVR depends on ffmpeg,yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild
- js实现chrome浏览器copy复制功能
- probability是什么意思_probability是什么意思_probability怎么读_probability翻译_用法_发音_词组_同反义词_可能性-新东方在线英语词典...
- dubbo客户端的实现
- IOS老版本应用最佳实践
- Springboot集成使用swagger2
- Python+BeautifulSoup实现网络教学平台学生测试题导出
- 大数据Hadoop平台搭建(Apache)
- 新魔百盒CM301H-MQ牌照-8822CS无线-300H芯片固件及教程
热门文章
- 深度学习知识库精华+图谱一览
- 如何禁用计算机的网络适配器,怎么禁用网络适配器?禁用和卸载网络适配器的步骤...
- 1600802088
- html选择文件夹控件,File文件控件,选中文件(图片,flash,视频)即立即预览显示
- html word-break,HTML Style wordBreak用法及代码示例
- 10.5国庆作业(IIC实验)
- s60v5全屏幕java_【转】 最新消息 ● S60v5官方华丽升级塞班^3系统java v2.1(亲测有效)...
- 破解利器C32Asm和IDApro
- vb.net odbc mysql_在VB.net 中连接MySql的类库
- acm CodeForces 546A