【发布时间】:2018-10-12 17:46:42
【问题描述】:
我正在尝试为 PHP 制作一个学习待办事项列表。 我使用了引导类:collapse 和 list-group。 每个列表标签都有 2 个用于计数器的徽章。
徽章 1 = 我没有时间学习或修改章节。
徽章 2 = 我没有真正使用本章中的概念。
当我点击徽章时,它们上的数字应该增加一。 稍后我将添加用于添加新章节和子章节的选项。
现在,我想将徽章的值保存在本地存储中以备后用。
当我刷新页面时,所有的徽章都应该更新为它们的当前值。
我已经知道如何从本地存储中获取和检索数据,但我不知道在当前情况下如何实现。
var badges= document.querySelectorAll('.badge');
badges.forEach(function (e) {
e.addEventListener('click', incrementBadge);
});
function incrementBadge(e){
let num =Number(e.target.textContent)+1;
e.target.textContent=num;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<div class="container mt-5">
<div class="row">
<div class="col-lg-6">
<button class="btn btn-block btn-info" data-toggle="collapse" data-target="#php">Php</button>
<div class="collapse" id="php">
<ul class="list-group mt-0">
<li class="list-group-item">Iteration
<span data-type="revise"class="badge badge-info float-right">4</span>
<span data-type="practice" class="badge badge-success float-right mr-3">2</span>
</li>
<li class="list-group-item">Selection
<span data-type="revise" class="badge badge-info float-right">0</span>
<span data-type="practice" class="badge badge-success float-right mr-3">2</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
【问题讨论】:
-
做起来并不难。您是否尝试过自己编写代码?这是the documentation。您的策略将是设置以下逻辑:1)在页面加载时为本地存储中设置的任何值分配本地存储中的徽章值,以及 2)在单击事件中写入本地存储以更新点击徽章。最难做的事情可能是决定如何在存储徽章时唯一标识它们。
-
我已经知道如何从本地存储中存储和检索数据。我的问题是我不知道如何唯一标识徽章以便以后存储和检索其值并在 javascript 代码中实现它。
-
如果你现在运行你的 sn-p,你的两行是什么?是
Iteration和Selection的标签吧?除非您将这些行与数字 ID 相关联,否则这就是您的唯一标识符。下一个问题是如何将基于文本的标识符从标记中获取到您的 javascript 中。您对如何实现这一点有任何想法吗?如果是我,我会先将这些字符串作为属性添加到标记中的某处。你认为哪里最好? -
我最初尝试使用章节标题和当前列表数据作为要存储的数据的键,我得到了使用一些正则表达式单击的徽章的值。谢谢约瑟夫,我想我有一个想法。我将使用带有章节名称的数组(即 php),并且行数字 ID 将用作数组的索引。但我仍然想不出如何识别哪些徽章及其值并将它们存储在键值对中并稍后检索它们
-
优秀。如何识别徽章。通过访问
e.target,您已经知道点击了哪一个。从此,您已经可以使用.textContent访问该值,这很有效。您可以使用e.target.getAttribute('your-attribute-name')。这样,您可以使用<span class="badge badge-info float-right" your-attribute-name="whatever">将该值的密钥放在徽章本身上。您还可以使用e.target.parentNode.getAttribute('whatever')访问父属性。这个选择取决于你。你能用类似的逻辑更新你的问题吗?
标签: javascript html local-storage badge