【JavaScript】3.1 项目实践:制作一个简单的网页应用

文章目录

    • 项目需求
    • HTML结构
    • JavaScript逻辑
      • 添加待办事项
      • 标记待办事项
      • 删除待办事项
      • 保存待办事项
    • 总结

在此章节中,我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用,用户可以添加新的待办事项,标记已完成的事项,以及删除事项。通过这个项目,我们将学习如何使用JavaScript操作DOM,处理事件,以及使用localStorage进行数据存储。

项目需求

我们的待办事项列表应用需要满足以下需求:

  1. 用户可以在输入框中输入待办事项,然后点击添加按钮,将待办事项添加到列表中。
  2. 用户可以点击待办事项旁边的复选框,将待办事项标记为已完成。
  3. 用户可以点击待办事项旁边的删除按钮,将待办事项从列表中删除。
  4. 用户关闭浏览器后,待办事项列表的状态应该被保存下来,用户再次打开浏览器时,应该能看到之前的待办事项。

HTML结构

首先,我们需要创建HTML页面的基本结构。我们需要一个输入框,一个添加按钮,以及一个待办事项列表。

<!DOCTYPE html>
<html>
<head><title>Todo List</title>
</head>
<body><input id="todoInput" type="text" placeholder="What needs to be done?"><button id="addButton">Add</button><ul id="todoList"></ul><script src="app.js"></script>
</body>
</html>

在这个HTML文件中,我们有一个input元素用于输入待办事项,一个button元素用于添加待办事项,以及一个ul元素用于显示待办事项列表。我们还包含了一个外部的JavaScript文件app.js,这个文件将包含我们的应用逻辑。

JavaScript逻辑

接下来,我们需要编写JavaScript代码来实现应用的逻辑。我们首先需要获取HTML元素的引用,然后对这些元素进行操作。

var todoInput = document.getElementById('todoInput');
var addButton = document.getElementById('addButton');
var todoList = document.getElementById('todoList');

添加待办事项

我们需要监听添加按钮的点击事件。当点击事件发生时,我们创建一个新的待办事项,并添加到列表中。

addButton.addEventListener('click', function() {var todoText = todoInput.value; // 获取待办事项的文本todoInput.value = ''; // 清空输入框var todoItem = document.createElement('li'); // 创建一个新的li元素todoItem.textContent = todoText; // 设置li元素的文本var checkbox = document.createElement('input'); // 创建一个新的input元素checkbox.type = 'checkbox'; // 设置input元素的类型为checkboxtodoItem.prepend(checkbox); // 将checkbox添加到li元素的前面var deleteButton = document.createElement('button'); // 创建一个新的button元素deleteButton.textContent = 'Delete'; // 设置button元素的文本todoItem.append(deleteButton); // 将button添加到li元素的后面todoList.append(todoItem); // 将li元素添加到列表中
});

在这个代码中,我们首先获取待办事项的文本,然后清空输入框。然后,我们创建一个新的li元素,并设置其文本。我们还创建了一个复选框和一个删除按钮,并添加到li元素中。最后,我们将li元素添加到列表中。

标记待办事项

我们需要监听复选框的点击事件。当点击事件发生时,我们将待办事项标记为已完成。

todoList.addEventListener('change', function(event) {if (event.target.type === 'checkbox') {var checkbox = event.target;var todoItem = checkbox.parentElement;todoItem.style.textDecoration = checkbox.checked ? 'line-through' : 'none';}
});

在这个代码中,我们监听了列表的change事件。当复选框的状态改变时,change事件会被触发。我们检查事件的目标是否是复选框,如果是,我们获取复选框和其父元素(即li元素),然后根据复选框的状态来修改li元素的样式。

删除待办事项

我们需要监听删除按钮的点击事件。当点击事件发生时,我们将待办事项从列表中删除。

todoList.addEventListener('click', function(event) {if (event.target.tagName === 'BUTTON') {var button = event.target;var todoItem = button.parentElement;todoList.removeChild(todoItem);}
});

在这个代码中,我们监听了列表的click事件。当删除按钮被点击时,click事件会被触发。我们检查事件的目标是否是按钮,如果是,我们获取按钮和其父元素(即li元素),然后从列表中删除li元素。

保存待办事项

我们需要使用localStorage来保存待办事项的状态。当添加、标记或删除待办事项时,我们需要更新localStorage。

首先,我们需要在页面加载时,从localStorage中读取待办事项的状态,并更新列表。

window.addEventListener('load', function() {var todos = JSON.parse(localStorage.getItem('todos')) || [];for (var i = 0; i < todos.length; i++) {var todo = todos[i];createTodoItem(todo.text, todo.completed);}
});

在这个代码中,我们监听了load事件。当页面加载时,我们从localStorage中读取待办事项的状态,然后用这些状态来创建待办事项。

然后,我们需要在添加、标记或删除待办事项时,更新localStorage。

function updateLocalStorage() {var todos = [];var todoItems = todoList.children;for (var i = 0; i < todoItems.length; i++) {var todoItem = todoItems[i];var text = todoItem.textContent;var completed = todoItem.querySelector('input').checked;todos.push({ text: text, completed: completed });}localStorage.setItem('todos', JSON.stringify(todos));
}

在这个函数中,我们遍历待办事项列表,然后将每个待办事项的文本和完成状态保存到一个数组中。然后,我们将这个数组转换为JSON字符串,并保存到localStorage中。

我们需要在添加、标记或删除待办事项的事件处理函数中,调用这个函数。

addButton.addEventListener('click', function() {// ...updateLocalStorage();
});todoList.addEventListener('change', function(event) {// ...updateLocalStorage();
});todoList.addEventListener('click', function(event) {// ...updateLocalStorage();
});

总结

通过这个项目,我们学习了如何使用JavaScript来创建一个简单的网页应用。我们学习了如何操作DOM,处理事件,以及使用localStorage进行数据存储。这是一个很好的实践项目,通过它我们可以更好地理解和应用JavaScript的基本概念。

在接下来的章节中,我们将深入学习更多关于JavaScript的知识。希望你在学习的过程中能够找到乐趣,并且通过学习JavaScript,开启你的编程之旅!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python实现银行管理系统

使用Python实现银行管理系统 题目介绍程序演示登录开户查询取款存款转账锁定解锁存盘退出 相关代码开户功能查询功能取款功能存款功能转账功能锁定功能解锁功能存盘功能加载存盘的数据登录/登出功能主程序 完整代码 在本篇博文中&#xff0c;我们将使用Python编写一个简单的银行…

MySQL 8 配置文件详解与最佳实践

MySQL 8 是一款强大的关系型数据库管理系统&#xff0c;通过适当的配置文件设置&#xff0c;可以充分发挥其性能潜力。在这篇博客中&#xff0c;我们将深入探究 MySQL 8 常用的配置文件&#xff0c;并提供一些建议&#xff0c;帮助您优化数据库性能。 配置文件概览 在 MySQL …

GPT、GPT-2、GPT-3论文精读笔记

视频&#xff1a;GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili MAE论文&#xff1a;把bert用回计算机视觉领域 CLIP论文&#xff1a;打通文本和图像 GPT 论文&#xff1a;Improving Language Understanding by Generative Pre-Training …

机器学习笔记 - 复杂任务的CNN组合

基础CNN架构可通过多种方式进行组合和扩展,从而解决更多、更复杂的任务。 1. 分类和定位 在分类和定位任务中,你不仅需要说出在图像中找到的物体的类别,而且还需指出物体显现在图像中的边界框坐标。这类任务假设在图像中只有一个物体实例。 这个任务可通过在典型的分类网络…

Java Web 实战 21 - 用 Servlet 实现一个Hello World

用 Servlet 来写一个 Hello World~ 一 . 基本部署方式1.1 创建 Servlet 项目1.2 引入依赖1.3 创建目录1.4 编写代码继承 HttpServlet重写 doGet 方法删除 super 方法加上 WebServlet 注解写业务逻辑 1.5 打包1.6 部署1.7 验证1.8 小结 二 . 更方便的部署方式2.1 Smart Tomcat 的…

【免费】小傅哥 DDD 开发小册

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 如果在面试的时候&#xff0c;面试官问你DDD是什么&#xff0c;你怎么解释&#xff1…

Windows下安装Anaconda3并使用JupyterNoteBook

下载安装包 Anaconda官网 进官网&#xff0c;点击下载 自动根据当前系统下载对应的包了&#xff0c;安装包大约1G&#xff0c;喝杯Java耐心等待。 安装 很多人安装C盘&#xff0c;我这里放D盘。 注意&#xff1a;你的文件夹目录一定要不能有空格 然后其他的直接默认install即…

代码随想录算法训练营第四十四天【动态规划part06】 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 题目链接&#xff1a; 题目页…

马养殖场建设VR模拟实训教学平台具有灵活性和复用性

为保障养殖场生物安全&#xff0c;避免疫病传播&#xff0c;学生出入养殖场受时间和地域的限制&#xff0c; 生产实习多以参观为主&#xff0c;通过畜牧企业技术人员的讲解&#xff0c;学生被动了解生产过程。为了解决畜牧养殖实训难的问题&#xff0c;借助VR技术开展畜牧养殖虚…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

Charles 网络抓包工具详解与实战指南

文章目录 导读软件版本Charles基本原理核心功能下载及安装界面介绍网络包展示 常用场景介绍PC 端网络抓包移动端网络抓包PC 端配置手机端配置 开启 SSL 代理PC 端和移动端 CA 证书安装Charles 直接安装Charles 下载 CA 文件手动安装 常用操作请求重发请求改写、动态改写断点&am…

Linux常用命令——blkid命令

在线Linux命令查询工具 blkid 查看块设备的文件系统类型、LABEL、UUID等信息 补充说明 在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备&#xff08;包括交换分区&#xff09;所使用的文件系统类型、LABEL、UUID等信息进行…