cookie、sessionStorage、localStorage的使用介绍,通过localStorage保存当前菜单、已打开菜单

news2024/10/6 0:34:07

这篇文章主要介绍前端常用的几种存储技术cookie、storage(sessionStorage、localStorage)的简单介绍和使用方法。

一、cookie

1、在JavaScript中使用cookie

使用原生的cookie

// 设置cookie
document.cookie = "name=Tom;age=18;";

// 获取cookie
let data = document.cookie;

console.log(cookie);

可以发现,cookie直接使用起来非常麻烦,一般会通过一些js工具来操作cookie

 

使用js-cookie

一般我们会通过js-cookie来操作cookie

js-cookiehttps://www.npmjs.com/package/js-cookie

可以看到,js-cookie使用起来非常简单,通过Cookie API就可以方便的对cookie进行操作。

// 创建一个cookie
Cookies.set('name', 'value');

// 创建一个cookie,并设置过期时间
Cookies.set('name', 'value', { expires: 7 });

// 获取cookie
Cookies.get('name');

// 删除cookie
Cookies.remove('name');

 

2、在jquery中使用cookie

在jquery中使用cookie需要引入cookie的插件jquery.cookie.min.js,通过以下链接下载

jquery-cookiehttps://www.bootcdn.cn/jquery-cookie/下载很简单,点击其中一个【复制链接】按钮

28e5c823bb92433fb2c451ffc79919b2.png

然后粘贴到浏览器的地址栏,鼠标右键单击页面,点击菜单中的另存页面为,点击保存就可以下载到本地了。

ec49bd9ab27348e18f5085a55138d698.png

77a5e6d58a844b4999c2b718fc71d978.png

 下载完成后,在我们的页面通过<script src=""></script>引入

然后就可以愉快地使用cookie了

$.cookie('name'); // 获取cookie

$.cookie('name', 'value'); // 设置cookie

$.cookie('name', 'value', { expires: 7 }); // 设置cookie,并设置有效期,单位/天

$.removeCookie('name'); // 删除cookie

 

二、storage

因为sessionStorage只在当前会话有效,一般不会使用他,这个部分只介绍localStorage的使用。

在jquery中使用localStorage:

// 获取值
localStorage.getItem("name");

// 设置值

localStorage.setItem("name", "value");

 

三、localStorage实战

这部分通过使用localStorage保存当前页面和一打开的标签页。一个标签页包含了标题和页面的url地址,打开页面时,会从localStorage中之前已打开的页面,然后设置选中当前页面。当关闭标签页时,会从localStorage中删除该标签页的信息(先获取、再删除、然后重新设置)。在这里通过Json来将对象转为JSON格式字符串保存到localStorage。

let tabs;

/**
 * 往localStorage中添加指定的tab
 * @param tab
 */
function addToTabs(tab) {
	if (!tabs) {
		tabs = [];
	}

	// 数组不存在才添加
	let exists = tabs.some(function (item) {
		return tab.title === item.title;
	});
	if (!exists) {
		tabs.push(tab);
	}

	setCurrent(tab.title);
	localStorage.setItem("tabs", JSON.stringify(tabs));
}

/**
 * 从localStorage中删除指定标题的tab
 * @param title
 */
function deleteFromTabs(title) {
	tabs = tabs.filter(function (item) {
		return item.title !== title;
	});

	localStorage.setItem("tabs", JSON.stringify(tabs));
}

/**
 * 获取所有打开的tab
 */
function getTabs() {
	let tabs = localStorage.getItem("tabs");

	return JSON.parse(tabs);
}

/**
 * 获取当前选中的tab
 */
function getCurrent() {
	return localStorage.getItem("currTab");
}

/**
 * 设置当前选中的tab
 */
function setCurrent(title) {
	localStorage.setItem("currTab", title);
}

/**
 * 初始化左侧菜单
 */
function InitLeftMenu() {
	$("#nav").accordion({
		animate: true
	});

	get("/menu/listMenuTree", {}, function(res) {
		$.each(res, function(i, node) {
			let menus = "<ul>";

			$.each(node.menus, function(j, child) {
				menus += "<li>";
				menus += 	"<div>";
				menus += 		"<a ref='" + child.id + "' href='javascript:void(0)' rel='" + child.url + "' >";
				menus += 			"<span class='icon " + child.icon + "' >&nbsp;</span>";
				menus += 			"<span class='nav'>" + child.name + "</span>";
				menus += 		"</a>";
				menus += 	"</div>";
				menus += "</li>";
			});

			menus += "</ul>";

			$("#nav").accordion("add", {
				title: node.name,
				content: menus,
				iconCls: "icon " + node.icon
			});

			//选中第一个
			let panels = $("#nav").accordion("panels");
			let tab = panels[0].panel("options").title;

			$("#nav").accordion("select", tab);
		});

		$(".easyui-accordion li a").on("click", function() {
			let url = $(this).attr("rel");
			let tabTitle = $(this).children(".nav").text();
			let icon = $(this).children(".icon").attr("class");

			addTab(tabTitle, url, icon);

			$(".easyui-accordion li div").removeClass("selected");
			$(this).parent().addClass("selected");
		}).hover(function() {
			$(this).parent().addClass("hover");
		}, function() {
			$(this).parent().removeClass("hover");
		});
	}, error);
}

function addTab(title, url, icon = "") {
	let exists = $("#tabs").tabs("exists", title);

	if (!exists) {
		$("#tabs").tabs("add", {
			title: title,
			icon: icon,
			closable: true,
			content: createFrame(url)
		});

		addToTabs({
			title: title,
			url: url
		});
	} else {
		$("#tabs").tabs("select", title);
		$("#mm-tabupdate").click();
	}

	tabClose();
}

function createFrame(url) {
	return "<iframe style='width:100%;height:100%;' scrolling='auto' frameborder='0'  src='" + url + "'></iframe>";
}

function tabClose() {
	// 双击关闭TAB选项卡
	$(".tabs-inner").dblclick(function() {
		let currTab = $(this).children(".tabs-closable").text();

		$("#tabs").tabs("close", currTab);

		deleteFromTabs(currTab);
	});

	// 为选项卡绑定右键
	$(".tabs-inner").bind("contextmenu", function(e) {
		e.preventDefault();

		$("#mm").menu("show", {
			left: e.pageX,
			top: e.pageY
		});

		let title = $(this).children(".tabs-closable").text();

		setCurrent(title);

		$("#tabs").tabs("select", title);
	});
}

/**
 * 绑定右键菜单事件
 */
function tabCloseEven() {
	// 刷新
	$("#mm-tabupdate").click(function() {
		let currTab = $("#tabs").tabs("getSelected");
		let url = $(currTab.panel("options").content).attr("src");

		$("#tabs").tabs("update", {
			tab:currTab,
			options: {
				content: createFrame(url)
			}
		})
	});

	// 关闭当前
	$("#mm-tabclose").click(function() {
		let title = getCurrent();

		deleteFromTabs(title);
		$("#tabs").tabs("close", title);
	});

	// 全部关闭
	$("#mm-tabcloseall").click(function() {
		$(".tabs-inner > span.tabs-closable").each(function(i, n) {
			let title = $(n).text();

			deleteFromTabs(title);
			$("#tabs").tabs("close", title);
		});
	});

	// 关闭除当前之外的TAB
	$("#mm-tabcloseother").click(function() {
		$("#mm-tabcloseright").click();
		$("#mm-tabcloseleft").click();
	});

	// 关闭当前左侧的TAB
	$("#mm-tabcloseleft").click(function() {
		let prevAll = $(".tabs-selected").prevAll();

		if(prevAll.length > 0) {
			prevAll.each(function(i, n) {
				let title = $("span.tabs-inner:eq(0) span.tabs-closable", $(n)).text();

				deleteFromTabs(title);
				$("#tabs").tabs("close", title);
			});
		}
	});

	// 关闭当前右侧的TAB
	$("#mm-tabcloseright").click(function() {
		let nextAll = $(".tabs-selected").nextAll();

		if(nextAll.length > 0) {
			nextAll.each(function(i, n) {
				let title = $("span.tabs-inner:eq(0) span.tabs-closable", $(n)).text();

				deleteFromTabs(title);
				$("#tabs").tabs("close", title);
			});
		}
	});

	// 退出
	$("#mm-exit").click(function() {
		$("#mm").menu("hide");
	});
}

$(function() {
	InitLeftMenu();
	tabClose();
	tabCloseEven();

	tabs = getTabs();


	$("#tabs").tabs({
		onSelect: function(title) {
			setCurrent(title);

			let currTab = $("#tabs").tabs("getTab", title);
			let iframe = $(currTab.panel("options").content);
			let src = iframe.attr("src");

			if (src) {
				$("#tabs").tabs("update", {
					tab: currTab,
					options: {
						content: createFrame(src)
					}
				});
			}
		},
		onClose: function(title) {
			deleteFromTabs(title);
		}
	});

	let currTab = getCurrent();

	if (tabs && tabs.length > 0) {
		for (let i = 0; i < tabs.length; i++) {
			let tab = tabs[i];

			addTab(tab.title, tab.url);
		}

		$("#tabs").tabs("select", currTab);
	}

});

好了,文章就分享到这里了,看完不要忘了点赞+收藏哦~

 

 

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

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

相关文章

使用Python和wxPython构建中文OCR截图工具

引言&#xff1a; 随着数字化时代的到来&#xff0c;我们经常需要从图像中提取文本信息。而在处理中文文本时&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术发挥着重要作用。本文将介绍如何使用Python编程语言和wxPython图…

powershell几句话设置环境变量

设置环境变量比较繁琐&#xff0c;现在用这段话&#xff0c;在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

ORACLE常用基础

. 1.oracle开机启动流程 su - oracle lsnrctl start lsnrctl status sqlplus / as sysdba startup 2、如何查看数据库版本 select * from v$version; 3.如何查看用户从那个设备连接的数据库 SELECT DISTINCT machine , terminal FROM V$SESSION; 4.如何查看表结构 selec…

【严重】Apache Airflow Run Task 权限绕过漏洞

漏洞描述 Airflow 是一个开源的工作流自动化平台&#xff0c;它允许用户定义、调度和监视工作流任务的执行。Run Task 是通过 Airflow 的 Web 界面或命令行工具。 在 Airflow 受影响版本中&#xff0c;Run Task 功能允许用户手动触发执行特定的任务&#xff0c;而不受正常的任…

CASAIM与迈普医学合作,基于CT数据三维重建和设计,在医疗辅具研究开发中实现高精度三维建模和偏差比对

近期&#xff0c;CASAIM与广州迈普再生医学科技股份有限公司&#xff08;简称&#xff1a;迈普医学&#xff09;合作&#xff0c;基于CT数据三维重建和设计&#xff0c;在医疗辅具研究开发中实现高精度三维建模和偏差比对&#xff0c;实现与缺损区域的精确匹配。 迈普医学&…

全新二开美化版UI好看的社区源码下载/反编译版

2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版&#xff0c;相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版&#xff08;请尊重每个作者的版权&#xff09;&#xff0c;这个版本没有加密&#xff0c;可以进行反编译&#xff0c;…

C#实现SqlServer数据库同步

实现效果&#xff1a; 设计思路&#xff1a; 1. 开启数据库及表的cdc&#xff0c;定时查询cdc表数据&#xff0c;封装sql语句(通过执行类型&#xff0c;主键;修改类型的cdc数据只取最后更新的记录)&#xff0c;添加到离线数据表&#xff1b; 2. 线程定时查询离线数据表&#xf…

访问器模式(C++)

定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 应用场景 在软件构建过程中&#xff0c;由于需求的改变&#xff0c;某些类层次结构中常常需要增加新的行为(方法)&#xff0c;如果直接…

分布式理论之CAP与BASE

分布式理论之CAP与BASE 一、什么是CAP1. 一致性&#xff08;Consistency&#xff09;&#xff1a;2. 可用性&#xff08;Availability&#xff09;&#xff1a;3. 分区容错性&#xff08;Partition tolerance&#xff09;&#xff1a;4. CAP小结&#xff1a; 二、AP&CP如何…

通向架构师的道路之weblogic与apache的整合与调优

一、BEAWeblogic的历史 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、 网络应用和数据库应 用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的 开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应…

气味传感器

本文将通过图文及视频的形式为各位介绍太阳诱电因应市场需求而开发的气味传感器产品。高浓度端采用QCM型&#xff0c;较低浓度端采用MEMS半导体型。另外还准备有FBAR型转换器。 太阳诱电为实现高灵敏度感应而开发了3款转换器。  高浓度端采用QCM型&#xff0c;较低浓度端采用…

python excel 操作

excel文件内容如下&#xff1a; 一、xlrd 读Excel 操作 1、打开Excel文件读取数据 filexlrd.open_workbook(filename)#文件名以及路径&#xff0c;如果路径或者文件名有中文给前面加一个 r 2、常用函数 &#xff08;1&#xff09;获取一个sheet工作表 table file.sheets(…

LeetCode 热题 100 JavaScript--234. 回文链表

function ListNode(val, next) {this.val val undefined ? 0 : val;this.next next undefined ? null : next; }var isPalindrome function (head) {if (!head || !head.next) {return true; }// 使用快慢指针法找到链表的中间节点let slow head;let fast head;while …

在win10上安装Docker desktop,并在docker中安装mysql

操作步骤: 安装docker 去 官网 下载安装软件;选择windows 2. 依次点击安装; 安装完成后无需登录,直接启动即可; 如果有提示需要更新wsl,执行以下命令更新: wsl --update wsl --status 查看状态 验证一下 适用命令:docker run hello-world 设置国内镜像 docker安装mysql…

Dockerfile部署golang,docker-compose

使用go镜像打包&#xff0c;运行在容器内 redis和mysql用外部的 项目目录结构 w1go项目&#xff1a; Dockerfile # 这种方式是docker项目加上 本地的mysql和redis环境 # go打包的容器 FROM golang:alpine AS builder# 为我们镜像设置一些必要的环境变量 ENV GO111MODULEon …

Apollo配置覆盖引发懒加载配置失效问题

背景 出现问题版本过低&#xff0c;最新版本可能已经做出调整&#xff0c;此文章只是记录 apollo-client.version 1.2.0 因为本地开发&#xff0c;想用测试环境的apollo&#xff0c;所以经常会出现本地覆盖测试环境的配置&#xff1b;一般我会新建一个local.properties来覆盖 …

Debian安装和使用Elasticsearch 8.9

命令行通过 .deb 包安装 Elasticsearch 创建一个新用户 adduser elastic --> rust # 添加sudo权限 # https://phoenixnap.com/kb/how-to-create-sudo-user-on-ubuntu usermod -aG sudo elastic groups elastic下载Elasticsearch v8.9.0 Debian 包 https://www.elastic.co/…

GATK BaseRecalibratorSpark 过程中因Too many open files终止

Error&#xff1a; GATK BaseRecalibratorSpark 过程中因Too many open files终止 执行命令&#xff1a; nohup time ./gatk --java-options "-Xmx16G" BaseRecalibratorSpark -R ../../alignment/hg38/hg38.fa -I ../../alignment/bam/P368T.sorted.markdup.bam …

【C++】C++文件操作-文本文件/二进制文件

0.前言 一、文本文件 1.写文件 代码 #include <iostream> using namespace std; #include <fstream> //头文件包含//************************************** //文本文件 写文件 void test01() {//1.包含文件 fstream//2.创建流对象ofstream ofs;//3.指导打开方式…

芒格之道——查理·芒格股东会讲话1987-2022

你越是认真生活&#xff0c;你的生活就会越美好&#xff01; 这里将读书过程划线的内容摘抄在这里&#xff0c;方便自己回顾。 书分为两部分&#xff0c;我先读了后半部分&#xff0c;而且是从后往前读&#xff0c;到了前半部分&#xff0c;我是从前往后读。书还挺贵&#xff…