javascript - 如果已单击链接,则 Jquery 从本地存储中删除项目
问题描述
我有一个带有一些搜索结果过滤器的页面。这些过滤器是链接,点击后,我将 id 添加到 localstorage。当页面重新加载时,如果链接的 id 存在,它会在本地存储中查找,它会修改该特定链接的 css。我能够做到这一点。现在,当再次单击相同的链接时,我需要能够从 localstoarage 中删除链接的 id,以便在页面重新加载时它不会更改 css。
这是我的代码。来自 StackOverflow 的一些好心人帮助我将这段代码组合在一起。我需要它来扩展。如果其中任何一个没有意义,请告诉我。很乐意重写我的句子。
$(document).ready(function() {
//localStorage.clear();
var cached = localStorage.getItem('filters');
var filters = (cached) ? JSON.parse(cached) : {};
for (id in filters) {
$('#' + id).addClass('li-checked');
}
$('.li-filter').click(function(e) {
//event.preventDefault();
$(e.target).addClass('li-checked');
$(e.target).removeClass('li-unchecked');
var id = $(e.target).attr('id').toString();
if (filters[id]) {
filters[id] += 1;
//filters = $.grep(filters, function(e) { return e.id!=id });
} else {
filters[id] = 1;
}
console.log(JSON.stringify(filters));
localStorage.setItem('filters', JSON.stringify(filters));
});
});
解决方案
@Rohit如果我正确理解了您的问题,onclick您必须添加一个类并将其删除以防它已被单击。对于这种情况,我建议编写功能来切换可以提供帮助的类。单击 li 时,您需要获取元素的类。
if($(e.target).attr("class").contains("li-checked"))
{
$(e.target).removeClass('li-checked');
$(e.target).addClass('li-unchecked');
}
else if((e.target).attr("class").contains("li-unchecked"))
{
$(e.target).removeClass('li-unchecked');
$(e.target).addClass('li-checked');
}
如果该类是“li-checked”,则将其删除并添加“li-unchecked”,如果该类是“li-unchecked”,则将其删除并添加“li-checked”
我希望它有所帮助。
推荐阅读
- r - 使用 ggplot 绘制游戏
- sql - 如何简化 sql 查询?
- javascript - 无法将 JSON 的对象转换为 Angular 7 中的键/值对
- php - 在 php 中发送标头的正确逻辑是什么?
- c# - 配置生成器 - 无法加载程序集 - .Net Framework
- c++ - 在 C++ 中将一个简单的 xml 解析为一个字符串
- reactjs - 如何在 setTimeout() 中使用组件的上下文?
- c++ - 我找不到 valgrind 告诉我的内存链接
- javascript - useState 和拼接反应
- angular - 使用 REST API 时 mat-table 数据源不起作用