Web - 使用 LocalStorage API 和 jQuery 删除选定的列表项

2024-02-19

作为或多或少的概念验证,我想使用 LocalStorage API 将列表项保存到存储中。我想出的方法有点复杂且效率低下,但对于删除单个列表项用例来说,它效果很好。下面是它的大致工作原理。使用 localStorage.length 我使用 Javascript 为笔记提供一个“id”。这样,我可以使用 for 循环从第一个注释迭代到 localStorage.length,并在两次执行之间的页面加载期间将每个注释附加到 HTML 页面。此外,通过这个 id,我可以识别使用 jQuery 单击了哪个注释。问题出在删除笔记上。我可以删除用户单击的注释,但如果我不重新排序注释列表,就会在存储中创建所谓的“漏洞”。那么有什么想法吗?

现场演示在这里,但可能不支持 localStorage API:https://jsfiddle.net/2xke90sm/2/ https://jsfiddle.net/2xke90sm/2/

只是 JavaScript:

    var localStorage = window.localStorage; 

            //First load all of the current notes in the user's storage into the page as list items
            var al1 = "";

            for(var p=0;p<localStorage.length;p++) {
                var temp  = localStorage.getItem(p.toString());
                if(temp != null) {              //assures that something is being written from memory, problem is that if it does find some null value, it's skipping over it
                    $("ul").append("<li id='note-" + p + "'><span>X</span> " + temp + "</li>");
                    al1 += "Note #" + p + ": '" + temp + "' has been loaded from memory. \n";
                } 
            }
            console.log(al1);

            // Check Off Specific Todos By Clicking
            $("ul").on("click", "li", function(){
                $(this).toggleClass("completed");

                //test if $("#note-[index]").html() is the same as localStorge.getItem(index.toString()) are the same.
                var matchingStorage = localStorage.getItem($(this).attr("id").slice(5).toString());
                console.log("HTML: " + $(this).text() + "\n" + "Local Storage: " + "X " + matchingStorage);
            });

            //Click on X to delete Todo
            $("ul").on("click", "span", function(event){
                $(this).parent().fadeOut(500,function(){
                    if(localStorage.getItem($(this).attr("id").slice(5).toString())) {
                        localStorage.removeItem($(this).attr("id").slice(5).toString());        //remove from storage
                        $(this).remove();       //remove from the page
                        reorder();
                    } else {
                        alert("could not delete element from storage.");
                    }
                });
                event.stopPropagation();
            });

            //Add new list item on enter key press
            $("input[type='text']").keypress(function(event){
                if(event.which === 13){
                    //grabbing new todo text from input
                    var todoText = $(this).val();
                    $(this).val("");
                    //create a new li, add to ul and give it the index of the localStorage system as the id
                    $("ul").append("<li id='note-" + localStorage.length + "'>" +  "<span>X</span> " + todoText + "</li>");
                    localStorage.setItem(localStorage.length.toString(), todoText);     //write the todoTextGet with the index as the key
                }
            });

            $("#toggle-form").click(function(){
                $("input[type='text']").fadeToggle();
            });

这确实是一个可以通过不同方式完成的任务,

“存储”项目并为它们提供唯一标识符是一个很好的做法。

let localStorage;

function generateId() {
        let newId = Math.random().toString(36).substr(2);

        while (storageGet(newId)) {
            newId = Math.random().toString(36).substr(2);
        }
        return (newId);
}

function storageInsert(key, obj) {
    localStorage.setItem(key, obj);
}

function storageGet(key) {
    return (localStorage.getItem(key));
}

function storageRemove(key) {
    localStorage.removeItem(key);
}

$(document).ready(() => {
    localStorage = window.localStorage; 

    //Load all.
    for (let i = 0; i < localStorage.length; i++){
        let key = localStorage.key(i);
        $("ul").append("<li id='note-" + key +"'> <span>X</span> " + storageGet(key) + "</li>");
    }
});

//Click on X to delete Todo
$("ul").on("click", "span", function(event){
    $(this).parent().fadeOut(500,function(){
            storageRemove($(this).attr("id").substr(5).toString());
            $(this).remove();
    });
    event.stopPropagation();
});

//Add new list item on enter key press
$("input[type='text']").keypress(function(event){
    if(event.which === 13){
        //Hold input.
        let todoText = $(this).val();

        //Generate an unique ID.
        let newId = generateId();

        //Reset Input.
        $(this).val("");

        //Create new element.
        $("ul").append("<li id='note_" + newId + "'>" +  "<span>X</span> " + todoText + "</li>");

        //Add to storage.
        storageInsert(newId, todoText);
    }
});

$("#toggle-form").click(function(){
    $("input[type='text']").fadeToggle();
});

一个工作示例:https://jsfiddle.net/2xke90sm/38/ https://jsfiddle.net/2xke90sm/38/

希望对您有帮助!

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

Web - 使用 LocalStorage API 和 jQuery 删除选定的列表项 的相关文章

  • 游戏手柄 JavaScript 未能按预期更新

    我正在尝试让浏览器报告我的 XBOX 控制器的状态 然而 在第一次按下按钮后 它似乎变得 卡住 我究竟做错了什么
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • 使 Material UI Grid 项目的子项拉伸以适合父容器的剩余高度

    1 现状 我有一个包含 4 个网格项的 Material UI 网格容器 每个 Grid 项中都有一个 Typography 组件 其中包含标题和包含一些内容的 Card 如下所示 2 期望的外观 我希望卡片填充网格项目的剩余高度并且不超过
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • Firebase 身份验证在 iOS 登录时卡住,没有错误

    我已经使用电子邮件和密码设置了 firebase 身份验证登录的最基本实现 firebase auth signInWithEmailAndPassword email password then gt console log Logged
  • 使用 CSS 覆盖透明 div 中的不透明文本

    我试图使透明 div 内的文本没有不透明度 也就是全黑 div style background 3cc p style background 000 This text should be all black p div 只用 CSS 就
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • @aspnet/signalr 与 @microsoft/signalr javascript 库

    aspnet signalr 与 microsoft signalr javascript 库有什么区别 两者似乎都对 DotNetCore SignalR 有效 两者似乎都很活跃 在一些教程中 我找到 aspnet signalr 在Do
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • 如何为 TBODY 应用垂直滚动条

    我的表中有 4 列和 5 行数据 我必须为 TBODY 应用垂直滚动条 TH 标题内容不应滚动 我对场景进行了编码 并且在我将滚动类应用于 TBODY 之前它工作正常 一旦我将滚动样式类应用于 TBODY 它就会破坏之前的对齐方式 任何人都
  • 如何使用 JavaScript 获取元素的填充值?

    我有一个textarea在我的 HTML 中 我需要获取整数或浮点形式的填充数值 以像素为单位 我如何使用 JavaScript 获取它 我没有使用 jQuery 所以我正在寻找纯 JavaScript 解决方案 这将返回padding l
  • JavaScript 提升解释

    下面的片段有什么区别 var a 0 function b a 10 return function a b console log a gt 10 and var a 0 function b a 10 return function a
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 水平对齐输入字段

    我正在尝试获取一个输入字段 并且它与同一水平线上的关联提交按钮相关 但事实证明这是一个挑战 这是我的代码
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • AngularJS 在指令运行之前通过 AJAX 检索数据

    我正在使用 AngularUIuiMap http angular ui github com directives map实例化谷歌地图的指令 uiMap 指令非常适合处理硬编码数据 mapOptions and myMarkers 但是
  • D3 将现有 SVG 字符串(或元素)追加(插入)到 DIV

    我到处寻找这个问题的答案 并找到了一些我认为可能有用的资源 但最终没有让我找到答案 这里有一些 外部SVG http bl ocks org mbostock 1014829 嵌入SVG https stackoverflow com qu
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保

随机推荐

  • 如何在构建服务器上使用“firebase login:ci”

    我正在使用以下命令运行nodejs构建Github 工作流程 https help github com en actions automating your workflow with github actions configuring
  • 将实际值从 fortran77 dll 返回到 c#

    有人可以指出我在这里做错了什么吗 FORTRAN 77 dll 代码 pragma aux DON DON export parm value 8 value 8 SUBROUTINE DON DAA DBB DCC REAL 8 DAA
  • Javascript:将 OOP 方法附加到事件和“this”关键字

    我是 OOP Javascript 新手 并且在使用时遇到问题this关键字和事件 我想要实现的是 我有多个 DOM 对象 并且不仅希望将公共事件绑定到它们 还希望将有关上述对象的一些数据保留在全局容器中 以提高运行时性能 所以我所做的基本
  • 为什么使用 scanf 读入字符串缓冲区可以在有或没有与号 (&) 的情况下工作?

    我对某事有点困惑 我的印象是读取 C 字符串的正确方法是scanf 沿着 不用担心可能的缓冲区溢出 这只是一个简单的例子 char string 256 scanf s string 然而 以下似乎也有效 scanf s string 这只
  • 比较 Excel 工作簿中两个工作表的最佳方法是什么

    鉴于我有以下内容
  • 为什么要使用字段而不是属性?

    我对 C 还很陌生 我认为属性是一件很棒的事情 事实上 这太棒了 以至于我看不出使用字段有任何真正的优势 即使对于私人领域 属性提供的灵活性和模块化似乎充其量可以让您避免严重的头痛 而最坏的情况则根本没有任何效果 我看到的字段的唯一优点是您
  • 将 iPhone X 旋转至横向时,封面图像左侧和下方出现空白

    今天出现了一个奇怪的问题 在测试一个简单的 即将推出 页面时 我的 iPhone X 上的背景图像在旋转到横向时没有填充整个视口 在 Chrome 和 Safari 中测试 产生问题的简化示例 html background url htt
  • 如何使这些按钮不显示为蓝色链接

    所以我只是想创建一个小网站 别担心这不会发生 作为标题 目前 主页 新闻 图库 和 关于我们 并不是指向另一个页面的实际按钮 当我做 a href Mainpage htm Home a 该按钮变成紫色并带有下划线 我知道这就是链接的显示方
  • 实体框架一对零或一外键关联

    我正在更改现有应用程序的后端以使用实体框架代码优先 我使用 Visual Studio 2015 中的内置工具根据现有数据库生成 POCO 类 这在大多数情况下都非常有效 除了两个具有一对零或一关系的类之外 这些是我的 简化的 课程 pub
  • 在 Shiny 中获取响应头变量

    我的 apache 将 LDAP 登录传递给变量X 远程用户在标题中 但我不知道如何在 Shiny 应用程序中获取它 有任何想法吗 也许解决方案可以是一些java脚本 好吧 我解决了 首先包含在ui Rjs函数 www js getLogi
  • Elasticsearch 自动完成或按令牌自动建议

    我想就如何基于标记完成术语提出建议 类似于谷歌的自动完成功能 但仅使用一个标记或单词 我想搜索将被标记化的文件名 例如 BRAND Connect A1233 jpg 被标记为 brand connect a1234 和 jpg 现在我想征
  • 如何在 Visual Studio 中搜索特定数据库表

    我在 Visual Studio 中有 6 个 dtsx 设计 文件 作业步骤 大多数情况下 作业步骤运行 sql 代码并删除 创建 复制表 如何搜索某个特定表格被触摸的位置 我尝试了 control F 并浏览了菜单中的搜索选项 我不认为
  • DataGridRow 上的 WPF DataGrid MouseOver

    我不明白为什么代码的第一部分不起作用 但第二部分却起作用 PART 1
  • 数据帧中值对出现的次数

    我有包含以下列的数据框 Name Surname dateOfBirth city country 我有兴趣找出最常见的名字和姓氏组合以及它出现的频率 如果能看到前 10 名组合的列表就好了 我对第一名的想法是 mostFreqComb d
  • AWS Lambda Java函数被多次调用

    我有一个AWS我用 Java 编写的 Lambda 函数 实际上是用 Clojure 编写的 每次运行它时它似乎都会被调用 3 次 我的函数在超时 设置为最长 5 分钟 内成功运行 它返回一个字符串 当我在控制台中测试该函数时 我可以看到输
  • 这是初始化 [ThreadStatic] 的线程安全方法吗?

    ThreadStatic private static Foo foo public static Foo CurrentFoo get if foo null foo new Foo return foo 前面的代码线程安全吗 或者我们需
  • 多核 CPU 中的核之间/跨核访问寄存器

    这可能听起来很疯狂 但我似乎不清楚是否有一个接口可供汇编程序员编写代码将内核 1 上的一个寄存器加载到内核 2 上的寄存器 例如 将内核 1 上的 EAX 加载到内核 2 上的 EAX 有可能吗 更多关于汇编程序员使用两个核心 在多个核心上
  • Python struct.error:结构格式中的错误字符

    首先我想知道这个python语句的作用 struct unpack sH len data 2 data 其次 我必须使用 python 发出 ICMP 请求消息 问题是我已经得到了老师给我的一些帮助代码 def step4 code se
  • 如何在java中检测日期是否在本周或下周内?

    如果我有一个事件的日期 例如 2011 01 03 如何在 java 中检测它是在本周还是下周内 有示例代码吗 Edit 我以为这是一个简单的问题 结果比我想象的要复杂 这周我吃的是 从上周日到这个周六 下周是从下周日到下周六 这部分取决于
  • Web - 使用 LocalStorage API 和 jQuery 删除选定的列表项

    作为或多或少的概念验证 我想使用 LocalStorage API 将列表项保存到存储中 我想出的方法有点复杂且效率低下 但对于删除单个列表项用例来说 它效果很好 下面是它的大致工作原理 使用 localStorage length 我使用