将当前样式表保存到本地存储

2023-12-04

我知道有人问过这个问题,但没有一个帖子可以帮助我解决这个问题。

所以,事情是这样的——我的网站上有两个样式表。我想将最近使用的样式表保存到本地存储。

样式表之间的切换效果很好。

这是我的代码:

    window.onload = function() {
        var currentStylesheet = localStorage.getItem("stylesheet");
        document.getElementById("stylesheet").value = currentStylesheet;
        document.getElementById("stylesheet").setAttribute("href", currentStylesheet);
        }

我从这里得到了这个代码here,并尝试适应我的使用,但遗憾的是 - 它不起作用。我的意思是 - 确实如此某物,但看起来它与样式表搞乱了并且根本不起作用。


你只是忘记了Storage.setItem()。您声明您想要“保存”最近使用的样式表。

我认为你在这里混淆了状态的概念。在您的代码示例中,您从 localStorage 读取值 a,但您在任何时候都没有尝试设置 localStorage。

让我们看一个最小的例子。我准备了一个现场演示如下:

现场演示

假设您有这些文件:

索引.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>repl.it</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <link id="active-stylesheet" href="" rel="stylesheet" type="text/css"/>
</head>

<body>
    <div class="switch-buttons">
        <button class="switch-buttons__light button" data-stylesheet="light.css">Go Light</button>
        <button class="switch-buttons__dark button" data-stylesheet="dark.css">Go Dark</button>
    </div>
    <h1>Light and Dark Stylesheets with Web Storage API</h1>
    <h2> See <a href="https://developer.mozilla.org/en-US/docs/Web/API/Storage">MDN Storage - Web Storage API</a>.</h2>
    <p>
      Click a button above. The style you select will be 'remembered' when you refresh this page. To reset this demo, click the 'Clear Storage' button.</p>
    <p>
        Faucibus interdum posuere lorem ipsum dolor sit amet, consectetur adipiscing elit duis tristique sollicitudin nibh sit amet commodo nulla facilisi? In metus vulputate eu scelerisque felis imperdiet proin fermentum leo.</p>
    <p>
        Etiam sit amet nisl purus, in mollis nunc sed id semper risus in! Ultricies lacus sed turpis tincidunt id aliquet risus feugiat in ante metus, dictum at tempor commodo, ullamcorper?</p>
    <button id="clear-storage">Clear Storage</button>
    <script src="script.js"></script>
</body>

</html>

光.css

body {
  background-color: #fff0bc;
}

h1, h2, p {
  color: #363636;
}

dark.css

body {
  background-color: #363636;
}

h1, h2, p {
  color: #fff0bc;
}

脚本.js

var buttons = document.getElementsByClassName("button");
var activeSheet = document.getElementById("active-stylesheet");
var clearStorageButton = document.getElementById("clear-storage");

// Test to see if localStorage already has a value stored
if (localStorage.getItem("lastActiveSheet")) {
     activeSheet.setAttribute("href", localStorage.getItem("lastActiveSheet"));
}

// Assign the event lister to each button
for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener("click", switchStyle);  
}

// Create a button to clear localStorage
clearStorageButton.addEventListener("click", clearStorage);

// Set the #active-stylesheet to be the light or dark stylesheet
function switchStyle() {
   var selectedSheet = this.getAttribute("data-stylesheet");
   activeSheet.setAttribute("href", selectedSheet);
   localStorage.setItem("lastActiveSheet", selectedSheet);
}

// Wrapper function to localStorage.clear
function clearStorage() {
  localStorage.clear();
}

如果您希望您的应用程序记住最近使用的样式表,则需要将其存储到 localStorage 中,作为用户将来再次访问您的应用程序时可以使用的值。

正如@Hynek 所指出的,使用它不是一个好主意window.onLoad。因此,在这个示例中,我将事件侦听器附加到所有使用的按钮上。

在此示例中,页面有两个选项可供选择:用于对比的浅色主题和深色主题。如果用户选择一个主题,下次刷新页面时将会记住该主题。

这里的关键是state。您希望您的应用程序具有“内存”。因此,您需要添加功能write, read, and clear记忆。我建议阅读更多内容MDN - 存储 - Web API看看如何实现这一点。 MDN 上还有更多示例!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将当前样式表保存到本地存储 的相关文章

  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • Python - 将日期时间参数传递到 SQL 命令中

    我正在尝试用Python做这样的事情 SQLCommand Delete From s where Date gt s and Date lt s calendar table name required starting date req
  • 使用 ruby​​ 和 active_record 保存时出现弃用警告

    我是 ruby 新手 正在编写一个需要将消息写入数据库日志的小脚本 我使用 ruby 1 9 3 和 active record 但没有 Rails 所有选择语句都工作正常 但我的写入日志函数返回以下错误 DEPRECATION WARNI
  • Python - 时间数据与格式不匹配

    我有以下格式的字符串时间 2016 12 10T13 54 15 294 我使用以下方法来格式化时间 time strptime ts b d H M S Y 这会引发错误 time data did not match format da
  • 使用 shell 变量查找具有多个文件名的 -name

    我有一个find命令查找名称与提到的多个模式匹配的文件 name范围 find L name SystemOut log o name out o name log o name javacore 这可以在命令行成功找到所需的文件 我正在寻
  • 如何管理 DOM 元素

    我已经实现了无限滚动 即当滚动条到达 div 底部时加载记录 它工作正常 但在页面上加载太多记录后 页面变得太重并导致渲染缓慢 实际上 我正在使用这种技术来替代 gridview 那么在这种情况下我如何管理繁重的 DOM 将 DOM 元素减
  • 使用带有 execve 的新路径来运行 ls 命令

    我正在尝试使用 execve 运行 ls 命令 目前我正在使用以下参数运行它 execve args 0 args env args args looks like ls l a NULL env args looks like PATH
  • 检查文件是否已保存到磁盘?

    我正在从服务器下载文件 将它们保存到设备 然后在我的应用程序中向用户显示它们 我想执行检查以查看该文件是否已存在于设备上 以便我们可以跳过下载并仅显示 但我无法找出执行此操作的最佳方法 我为每个文件创建一个唯一的文件名 然后将其转换为 NS
  • 如何使用 DataTable.Select() 解决文件管理器值中的单引号问题

    假设我想要productCode下面的变量被分配名为产品的产品代码Cookie s 注意其中的 ProductName因为它是导致下面的语句失败的原因 基本上 过滤表达式中的 会导致错误的 SQL 语法 我将不胜感激你们的任何想法 Data
  • 如何在 Zend Framework 2 中将数据库适配器设置为 Validator RecordExists

    我正在尝试将验证器 RecordExists 添加到我的表单中 但收到错误 不存在数据库适配器 如何将数据库适配器设置为此验证器 我使用骨架应用程序中的示例 我正在尝试执行类似的操作 是的 我知道 dbAdapter 未定义 我正在搜索如何
  • 无法手动将签名的 apk 安装到设备,出现错误“应用程序未安装”

    我想将我的应用程序发布到 GooglePlay 但首先我想使用签名的 apk 进行最后一次测试 以确保所有使用的 API 密钥都能在发布版本 GMaps Facebook 等 中正常工作 所以我只是使用我们的发布密钥制作了我的应用程序的签名
  • 获取全球ip地址

    我怎样才能得到 在C 中 global我的电脑的IP地址 Windows XP 你不能 您可以确定各个接口上的 IP 地址 并且可能有多个 这些可能是局域网 IP 10 0 0 0 8 192 168 0 0 16 等 也可能是 Inter
  • 如何使用 FFmpeg hstack 过滤器合成 2 个视频?

    我想通过并排将 2 个视频合成为 1 个视频 我还希望为每个视频设置开始 停止时间 最终视频应为 H264 AAC 编解码器和 mp4 格式 我附上了示例视频 https www dropbox com s e5eouyrrqsy44ts
  • iPhone X 中的导航栏问题? [复制]

    这个问题在这里已经有答案了 当我在 iPhone X 中运行该项目时 导航栏上方出现黑色空间 如图所示 但颜色没有相同 怎么解决这个问题呢 我想您没有使用故事板作为启动屏幕 有两个选项可以解决此问题 使用故事板作为启动屏幕 如果您使用启动图
  • 如何更新 Bitnami 堆栈中的 GitLab

    我在尝试BitNami GitLab 堆栈5 1 0 2 当我这样做的时候5 1 0 3被释放了 如何更新 Bitnami 堆栈中的 GitLab 相关带 LDAP 的 BitNami GitLab Stack 5 1 0 2 看这个 ht
  • 当我复制 laravel 项目并显示最后一个视图时出错

    我有一个 Laravel 5 3 项目 它是 5 个月前创建的 今天我复制了该项目 并对代码做了一些更改 当我编辑 Blade php 文件中的视图时 我编辑的项目向我显示了最后一个项目视图 我在新的 Laravel 项目中创建了一条新路线
  • 单击工具栏上的汉堡包图标不会打开导航抽屉

    我有这个导航抽屉工作得很好 重构我的代码我删除了所有onOptionsItemSelecteds在活动中并使所有活动继承自扩展的基本活动AppComplatActivity and 实施所有必要的方法 在此之后 即使我有 单击汉堡包图标也不
  • WPF DataGrid - 我可以使用属性装饰 POCO 以获得自定义列名称吗?

    我在 WPF 中有一个 DataGrid 并用如下数据填充它 public enum Sharing Equal SurfaceBased public class Data public bool Active get set publi
  • 无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException

    我正在尝试使用反射来调用带有可变参数的方法 并抓住了NoSuchMethodException 我不明白这里出了什么问题 Code public class ReflectionTest public ReflectionTest priv
  • SwiftUI 中的 @Binding 和 ForEach

    我不明白如何使用 Binding结合ForEach在 SwiftUI 中 假设我想创建一个列表Toggles 来自布尔数组 struct ContentView View State private var boolArr false fa
  • 将当前样式表保存到本地存储

    我知道有人问过这个问题 但没有一个帖子可以帮助我解决这个问题 所以 事情是这样的 我的网站上有两个样式表 我想将最近使用的样式表保存到本地存储 样式表之间的切换效果很好 这是我的代码 window onload function var c