【JavaScript】搭建一个具有记忆的简洁个人待办网页

1. HTML 结构

  1. 文档类型声明
    <!DOCTYPE html>
    
    这告诉浏览器这是一个 HTML5 文档。
  2. HTML 标签
    <html lang="zh-CN">
    
    表示整个页面的内容,lang="zh-CN" 表示内容使用简体中文。
  3. 头部信息
    <head><!-- ... -->
    </head>
    
    包含页面的元数据,如字符集、视图窗口设置、标题和样式。
  4. 样式(CSS)
    <style> 标签内定义了页面的样式,包括字体、布局、颜色和响应式设计等。
  5. 主体内容
    <body><!-- ... -->
    </body>
    
    包含网页的所有可见内容。
  6. 容器
    <div class="container"><!-- ... -->
    </div>
    
    页面内容被包裹在一个容器内,以便于样式控制和布局。
  7. 标题和输入框
    <h1>待办事项列表</h1>
    <input type="text" id="todoInput" placeholder="请输入待办事项">
    
    显示应用的标题和一个输入框供用户输入待办事项。
  8. 按钮
    <button class="add-btn" onclick="addTodo()">添加待办</button>
    <button class="clear-btn" onclick="clearTodos()">清空所有</button>
    
    两个按钮分别用于添加新的待办事项和清空所有待办事项。
  9. 待办事项列表
    <ul id="todoList">
    </ul>
    
    待办事项将显示在这个无序列表内。

2. JavaScript 行为

  1. 添加待办事项 (addTodo 函数):
    • 获取输入框的值。
    • 检查值是否为空。
    • 创建一个新的列表项 (li)。
    • 创建一个删除按钮,并为它绑定点击事件处理函数以从列表中删除对应的待办事项。
    • 将待办事项添加到列表中。
    • 清空输入框并保存待办事项。
  2. 清空所有待办事项 (clearTodos 函数):
    • 移除列表中的所有子节点。
    • 保存待办事项。
  3. 保存待办事项 (saveTodos 函数):
    • 将所有待办事项的文本和完成状态保存到本地存储(localStorage)。
  4. 加载待办事项 (loadTodos 函数):
    • 从本地存储加载待办事项。
    • 为每个待办事项创建列表项和删除按钮,并恢复其完成状态。
    • 将待办事项添加到列表中。
  5. 编辑待办事项(通过双击列表项):
    • 弹出对话框让用户编辑待办事项文本。
    • 更新列表项的文本并保存待办事项。
  6. 切换完成状态(通过点击列表项):
    • 为列表项添加或移除 completed 类。
    • 保存待办事项。

当页面加载时,loadTodos 函数会被调用,从本地存储加载待办事项并显示在页面上。

3. 展示效果

在这里插入图片描述

4. 源代码

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>待办事项列表</title><style>body {font-family: Arial, sans-serif;}.container {max-width: 600px;margin: 0 auto;padding: 20px;}input[type="text"] {width: 100%; /* 使输入框宽度与容器宽度一致 */padding: 10px; /* 增加内边距 */margin-bottom: 10px; /* 添加底部外边距 */border: 1px solid #ddd; /* 设置边框样式 */}button {padding: 10px; /* 使按钮内边距与输入框一致 */border: none; /* 移除边框 */background-color: #4CAF50; /* 设置背景颜色 */color: white; /* 设置文字颜色 */cursor: pointer; /* 设置鼠标样式为指针 */margin-bottom: 10px; /* 添加底部外边距 */}button:hover {background-color: #45a049; /* 鼠标悬停时改变背景颜色 */}ul {list-style: none;padding: 0;}li {margin: 10px 0;padding: 10px;background-color: #f9f9f9;border: 1px solid #ddd;position: relative; /* 为待办事项设置相对定位 */}.delete-btn {background-color: #f44336;color: white;border: none;padding: 5px 10px;cursor: pointer;position: absolute; /* 为删除按钮设置绝对定位 */right: 10px; /* 将删除按钮定位到右下角 */bottom: 10px; /* 将删除按钮定位到右下角 */width: calc(100% / 6); /* 设置删除按钮宽度为待办框的六分之一 */}.completed {text-decoration: line-through;color: #aaa;}.add-btn {background-color: #4CAF50;color: white;border: none;padding: 10px 20px;font-size: 16px;cursor: pointer;margin-top: 20px;}.clear-btn {background-color: #f0ad4e;color: white;border: none;padding: 10px 20px;font-size: 16px;cursor: pointer;margin-top: 20px;}.clear-btn:hover {background-color: #ec971f;}
</style></head>
<body><div class="container"><h1>待办事项列表</h1><input type="text" id="todoInput" placeholder="请输入待办事项"><button class="add-btn" onclick="addTodo()">添加待办</button><button class="clear-btn" onclick="clearTodos()">清空所有</button><ul id="todoList"></ul></div><script>function addTodo() {const todoInput = document.getElementById('todoInput');const todoList = document.getElementById('todoList');const todoText = todoInput.value.trim();if (todoText === '') {alert('请输入待办事项!');return;}const li = document.createElement('li');li.textContent = todoText;const deleteBtn = document.createElement('button');deleteBtn.className = 'delete-btn';deleteBtn.textContent = '删除';deleteBtn.onclick = function() {todoList.removeChild(li);saveTodos();};li.appendChild(deleteBtn);<!--li.ondblclick = function() {<!--    const editText = prompt("编辑待办事项:", li.textContent);<!--    if (editText !== null && editText.trim() !== '') {<!--        li.textContent = editText;<!--    }<!--    saveTodos();<!--};<!--li.onclick = function() {li.classList.toggle('completed');saveTodos();};todoList.appendChild(li);todoInput.value = '';saveTodos();}function clearTodos() {const todoList = document.getElementById('todoList');while (todoList.firstChild) {todoList.removeChild(todoList.firstChild);}saveTodos();}function saveTodos() {const todos = [];document.querySelectorAll('#todoList li').forEach(function(li) {todos.push({text: li.textContent.replace('删除', '').trim(),completed: li.classList.contains('completed')});});localStorage.setItem('todos', JSON.stringify(todos));}function loadTodos() {const todos = JSON.parse(localStorage.getItem('todos'));if (todos) {todos.forEach(function(todo) {const li = document.createElement('li');li.textContent = todo.text;if (todo.completed) {li.classList.add('completed');}const deleteBtn = document.createElement('button');deleteBtn.className = 'delete-btn';deleteBtn.textContent = '删除';deleteBtn.onclick = function() {li.remove();saveTodos();};li.appendChild(deleteBtn);li.ondblclick = function() {const editText = prompt("编辑待办事项:", li.textContent);if (editText !== null && editText.trim() !== '') {li.textContent = editText;}saveTodos();};li.onclick = function() {li.classList.toggle('completed');saveTodos();};document.getElementById('todoList').appendChild(li);});}}loadTodos();</script>
</body>
</html>

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

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

相关文章

文笔差只因没找对工具,这5个AI帮你变身写作高手!

在详细评估了超过二十种AI写作辅助应用后&#xff0c;我挑选了四款特别出色的工具来向您介绍。这些工具不仅能显著提高您的写作速度&#xff0c;而且在特定用途下能够创造出优秀的内容&#xff0c;从而避免了一些常见的AI写作缺陷。 通常情况下&#xff0c;对AI生成内容感到不…

【漏洞复现】Yearning数据库审计平台 front 任意文件读取漏洞

一、产品介绍 一款MYSQL SQL语句/查询审计开源工具&#xff0c;Yearning支持SQL查询、SQL审核、推送、用户权限及管理等功能&#xff0c;为DBA与开发人员使用&#xff0c;简单高效的MYSQL审计平台。 二、漏洞描述 该系统Yearning 2.3.1 版本、Interstellar GA 2.3.2 版本和 N…

Mybatis详细教程 (万字详解)

Mybatis 3.5.14 来自于B站‘天气预报’,一名宝藏up,跟着他可以培养起独立解决编程问题的能力&#xff01;&#xff01;&#xff01; 01.简介 1.1 官网 官方中文网: MyBatis中文网 中文网参考手册 1.2 概念 MyBatis 是一款优秀的持久层框架&#xff0c;支持自定义 SQL, 存储过…

【含文档】基于Springboot+Vue的高校竞赛管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 系统定义了三个…

机器学习学习笔记-20240927

文章目录 一些简单的指令数据操作广播机制 标量&#xff0c;向量&#xff0c;矩阵的相互求导1. 标量对标量的求导2. 标量对向量的求导3. 向量对标量的求导4. 向量对向量的求导5. 矩阵对标量的求导6. 矩阵对向量的求导 链式求导法则YYDS求出损失函数偏导为0时的最优解w*1. 损失函…

昇思MindSpore进阶教程-格式转换

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 MindSpore中可以把用于训练网络模型的数据…

打造未来社交:区块链社交DAO的颠覆性开发之路

随着区块链技术的不断发展&#xff0c;去中心化自治组织&#xff08;DAO&#xff09;逐渐成为一种创新的社交模式。结合区块链的透明性和不可篡改性&#xff0c;社交DAO为用户提供了一种全新的参与和治理方式&#xff0c;重塑了社交网络的构建与互动方式。本文将探讨区块链社交…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 文…

Python画笔案例-066 绘制橙子

1、绘制橙子 通过 python 的turtle 库绘制 橙子,如下图: 2、实现代码 绘制 橙子,以下为实现代码: """橙子.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小化,然后…

教师工作量在线管理服务

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

springAOP和spring事务

AOP 1.简介 Aop面向切面编程&#xff1a;在开发中我们不能直接对已经设计好的代码进行修改&#xff08;开放-封闭原则&#xff0c;对扩展开放&#xff0c;对修改封闭&#xff09;&#xff0c;解耦 AOP的底层实现为动态代理 * Target&#xff08;目标对象&#xff09;&#…

专业网站建设必备

专业网站建设不仅仅是简单的页面搭建&#xff0c;更是一项综合性的工程&#xff0c;需要结合行业特性、用户体验和技术创新&#xff0c;打造一个符合企业需求、独具特色的线上空间。 第一印象至关重要 一个企业网站就如同公司的数字名片&#xff0c;第一印象往往决定了用户是否…

衡石分析平台系统管理手册-功能配置之全局 JS 设置

全局 JS 设置​ 衡石系统提供了全局 JS 设置功能&#xff0c;用户可以通过自定义 JS 代码实现系统的个性化需求&#xff0c;如使用第三方统计工具对系统平台的 PV 、UV 进行监测。 使用场景​ 场景1&#xff1a;增加百度统计​ 下图示例中使用 js 代码引用了百度网站统计功…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司&#xff0c;专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造&#xff0c;立足于香港这一国际金融中心&#xff0c;放眼全球&#xff0c;汇聚了华…

部分监督多器官医学图像分割中的标记与未标记分布对齐|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Labeled-to-unlabeled distribution alignment for partially-supervised multi-organ medical image segmentation 部分监督多器官医学图像分割中的标记与未标记分布对齐 01 文献速递介绍 多器官医学图像分割&#xff08;Mo-MedISeg&#xff09;是医学图像分析…

『功能项目』下载Mongodb【81】

下载网址&#xff1a;Download MongoDB Community Server | MongoDB 点击安装即可 选择Custom 此时安装已经完成 桌面会创建图标 检查是否配置好MongoDB 输入cmd命令行 Windows键 R 打开命令行 输入cmd 复制安装路径 复制data路径 如果输出一大串代码即配置mongdb成功

LeetCode 面试经典150题 172.阶乘后的零

题目&#xff1a;给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 思路&#xff1a; 代码&#xff1a; class Solution {public int trailingZeroes(int n) {return n 0 ? 0 : n / 5 trailingZeroes(n / 5);}…

央企办医布局智慧医康养,环球医疗(2666.HK)让养老有“医”靠

投资传奇查理芒格说&#xff1a;“我给自己设定的目标是追求平常人没有的常识。”只有挖掘出市场潜移默化的趋势&#xff0c;才能抓住投资机遇。 当下&#xff0c;资本市场一个被低估的产业趋势是&#xff0c;医疗健康行业大并购时代悄然开启&#xff0c;头部上市公司对并购产…

【Python快速学习笔记01】下载解释器/环境变量配置/PyCharm下载/第一个代码

目录 1.下载python解释器 2.第一个python程序 3.配置解释器环境变量 4.下载开发工具 PyCharm 4.通过PyCharm编写第一个python程序 1.下载python解释器 官网下载&#xff0c;但是下载太慢了&#xff0c;所以直接百度搜了下载了个 Welcome to Python.org 1.官网下载 2.直…