
本教程详细介绍了如何在j*ascript工作日计划应用中使用`localstorage`实现数据持久化。我们将学习如何初始化、保存和重新加载日程事件数据,确保用户在刷新页面后仍能看到之前输入的日程安排,并优化数据存储逻辑以避免重复和确保数据更新。
在现代Web应用开发中,数据持久化是一个常见需求,尤其对于像日程计划器这类需要保存用户输入的应用。Web Storage API,特别是localStorage,提供了一种在浏览器端存储键值对数据的简便方法,并且这些数据在浏览器会话结束后仍然保留,即实现了页面重载后的数据持久化。本教程将指导您如何在工作日计划应用中集成和优化localStorage的使用。
localStorage 是一个全局对象,它提供了以下几个核心方法:
由于localStorage只能存储字符串,因此在存储J*aScript对象或数组时,需要使用JSON.stringify()将其转换为JSON字符串;在读取时,则需要使用JSON.parse()将其解析回J*aScript对象或数组。
为了在页面加载时显示之前保存的日程,我们需要在$(document).ready()事件中执行以下操作:
MarketingBlocks AI
AI营销助理,快速创建所有的营销物料。
27
查看详情
// ... 其他代码 ...
$(document).ready(function() {
var scheduleContent = []; // 用于存储日程数据的内存数组
// 函数:从localStorage加载日程并渲染到UI
function loadSchedule() {
var getLocalStorageData = JSON.parse(localStorage.getItem("schedule-items"));
if (getLocalStorageData !== null) {
scheduleContent = getLocalStorageData; // 更新内存数组
// 遍历加载的数据,并填充到对应的textarea元素中
scheduleContent.forEach(function(item) {
// 确保通过正确的ID找到textarea并设置其值
$("#" + item["input-id"]).val(item["input-value"]);
});
}
}
// 页面加载时调用,以显示之前保存的日程
loadSchedule();
// ... 其他代码 ...
});原始代码在保存时简单地将新数据push到数组中,这可能导致重复条目。为了确保每个时间段只有一个日程,我们需要在保存时检查该时间段是否已有日程:
// ... 其他代码 ...
$(document).ready(function() {
// ... loadSchedule() 和 loadSchedule() 调用 ...
// 保存按钮点击事件处理
$("button").on("click", function() {
var container = $(this).parent().parent();
// 获取textarea的值,并去除首尾空格
var inputValue = container.find("textarea").val().trim();
// 获取textarea的ID
var inputId = container.find("textarea").attr("id");
if (inputValue !== "") {
// 查找是否已存在相同input-id的日程
var existingIndex = scheduleContent.findIndex(item => item["input-id"] === inputId);
if (existingIndex > -1) {
// 如果存在,更新现有日程的值
scheduleContent[existingIndex]["input-value"] = inputValue;
} else {
// 如果不存在,添加新日程
var textObj = {
"input-id": inputId,
"input-value": inputValue
};
scheduleContent.push(textObj);
}
} else {
// 如果输入值为空,则从日程列表中移除该项(如果存在)
scheduleContent = scheduleContent.filter(item => item["input-id"] !== inputId);
}
// 将更新后的日程数组保存到localStorage
localStorage.setItem("schedule-items", JSON.stringify(scheduleContent));
// 可选:提供用户反馈
alert("日程已保存!");
});
// ... 时间块颜色逻辑 ...
});将上述加载和保存逻辑与原有的时间显示和时间块颜色标记功能结合,得到一个完整且功能优化的J*aScript文件:
// 实时时钟显示
const clock = document.getElementById("clock");
setInterval(() => {
const now = moment();
const readable = now.format("dddd, MMMM Do YYYY, h:mm:ss a");
clock.textContent = readable;
}, 1000);
// DOM加载完成后执行
$(document).ready(function() {
var scheduleContent = []; // 用于存储日程数据的内存数组
// 函数:从localStorage加载日程并渲染到UI
function loadSchedule() {
// 尝试从localStorage获取数据并解析
var getLocalStorageData = JSON.parse(localStorage.getItem("schedule-items"));
if (getLocalStorageData !== null) {
scheduleContent = getLocalStorageData; // 更新内存数组
// 遍历加载的数据,并填充到对应的textarea元素中
scheduleContent.forEach(function(item) {
// 使用jQuery选择器通过ID找到textarea并设置其值
$("#" + item["input-id"]).val(item["input-value"]);
});
}
}
// 页面加载时调用,以显示之前保存的日程
loadSchedule();
// 保存按钮点击事件处理
$("button").on("click", function() {
var container = $(this).parent().parent();
// 获取textarea的值,并去除首尾空格,确保数据干净
var inputValue = container.find("textarea").val().trim();
// 获取textarea的ID,用于唯一标识日程条目
var inputId = container.find("textarea").attr("id");
if (inputValue !== "") {
// 查找是否已存在相同input-id的日程
var existingIndex = scheduleContent.findIndex(item => item["input-id"] === inputId);
if (existingIndex > -1) {
// 如果存在,更新现有日程的值
scheduleContent[existingIndex]["input-value"] = inputValue;
} else {
// 如果不存在,添加新日程对象
var textObj = {
"input-id": inputId,
"input-value": inputValue
};
scheduleContent.push(textObj);
}
} else {
// 如果输入值为空,则从日程列表中移除该项(如果存在)
scheduleContent = scheduleContent.filter(item => item["input-id"] !== inputId);
}
// 将更新后的日程数组转换为JSON字符串并保存到localStorage
localStorage.setItem("schedule-items", JSON.stringify(scheduleContent));
// 可选:提供用户保存成功的反馈
alert("日程已保存!");
});
// 时间块颜色标记逻辑
var elements = $(".time-block");
var d = new Date();
var h = d.getHours(); // 获取当前小时 (0-23)
for (let i = 0; i < elements.length; i++) {
var t = parseInt(elements[i].getAttribute("data-hour")); // 获取时间块对应的小时
if (h < t) {
// 当前小时小于时间块小时,标记为未来 (绿色)
elements[i].classList.add('future');
elements[i].classList.remove('past', 'present');
} else if (h > t) {
// 当前小时大于时间块小时,标记为过去 (灰色)
elements[i].classList.add('past');
elements[i].classList.remove('future', 'present');
} else if (h === t) {
// 当前小时等于时间块小时,标记为现在 (红色)
elements[i].classList.add('present');
elements[i].classList.remove('future', 'past');
}
// 原始代码中的 'else if (h > 16 && h < 9)' 逻辑上不可能,已移除。
// 如果需要处理跨天或特定时间段的特殊颜色,应重新设计逻辑。
}
});通过以上步骤,您的工作日计划应用将能够有效地利用localStorage实现日程数据的持久化,为用户提供更稳定和便捷的使用体验。
以上就是如何在工作日计划应用中实现本地存储与数据持久化的详细内容,更多请关注其它相关文章!
# java
# 转换为
# 是一个
# 如何在
# 数据结构
# 移除
# 将其
# 遍历
# 不存在
# 加载
# 键值对
# 浏览器端
# 应用开发
# ai
# ssl
# 浏览器
# json
# js
# jquery
# javascript
# 点击事件
# 娄底网站优化询问报价
# 如何使用360推广网站
# seo刷词工具开
# 线下校园营销推广策略
# 甘肃正规网站建设技巧
# 美甲关键词排名查询
# 东莞网站建设实例图纸
# 荆州市seo优化
# 广东网站制作优化
# seo中间长尾词
# 值为
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Vue 3中独立响应式实例的创建与应用
Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧
一点万象签到领积分指南
t3出行如何使用微信支付
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
mysql怎么导入sql文件_mysql导入sql文件的方法与技巧
sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程
J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解
mysql中如何配置字符集和排序规则_mysql字符集排序配置
c++如何使用std::thread::join和detach_c++线程生命周期管理
《豆瓣》私信用户方法
在Dash应用中自定义HTML标题和网站图标
《下一站江湖2》独孤剑诀习得方法
263企业邮箱如何设置邮件转发功能
口腔诊所管理软件推荐
圆通快递官网入口查询单号 手机版官方查询入口
Animex动漫社社登录官网 Animex动漫社资源社入口直达
苹果SE如何开启单手模式_苹果SE单手操作功能
支付宝登录刷脸不是本人如何解决
原子笔记app误删找回教程
如何通过settings.json个性化您的VS Code体验
鸿蒙单条备忘录如何加密
在Flask应用中安全高效地更新SQLAlchemy用户数据
怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】
FotoBalloon图片左右镜像教程
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤
狙击外星人小游戏在线链接_狙击外星人小游戏网页链接
Go语言反射机制:如何访问被嵌入结构体遮蔽的方法
Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】
iPhone12是否要更新ios16
《小宇宙》标记不友善评论方法
Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问
CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化
抖音网页版地址直接进入_抖音网页版在线观看入口
《飞猪旅行》购买汽车票方法
如何在CSS中设置背景图像:一个全面指南
海棠阅读登录教程_详细讲解海棠登录操作
MySQL多重关联查询:利用别名高效获取同一表的多个关联字段
邮编号码查询app有哪些_邮编号码查询推荐app及使用体验
《单词速记宝》设置学习计划方法
在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享
126邮箱申请入口官网_126邮箱注册免费登录2025
Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题
百度网盘网页入口链接分享 百度网盘官网入口网页登录
mysql如何配置从库只读_mysql从库只读设置方法
在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示
悟空浏览器网页版链接 悟空浏览器网页版最新有效地址
谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法
J*aScript字符串_Unicode处理
2025-11-15
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。