fol*_*mer 5 html javascript css jquery local-storage
我目前有一个显示不同团队数据的页面.
我有一些数据,用户可以点击这些数据使其处于"开启"或"关闭"状态,每个数据都显示不同的图标.它基本上就像一个清单,只是没有物理复选框.
我想记住哪些"复选框"已被勾选,即使用户刷新页面或关闭浏览器并稍后返回.
我听说这localStorage是一个不错的选择,但我不确定如何在像我这样的情况下使用它.
目前我有这个代码:
team1 = {
"information1": {
"name": "tom",
"age": "34"
},
"information2": {
"name": "bob",
"age": "20"
},
};
team2 = {
"information1": {
"name": "betsy",
"age": "27"
},
"information2": {
"name": "brian",
"age": "10"
},
};
$(document).ready(function() {
$("#displayObject1").on("click", function() {
switchData(team1);
});
$("#displayObject2").on("click", function() {
switchData(team2);
});
$("#table").on("click", ".on", function() {
$(this).removeClass("on");
$(this).addClass("off");
});
$("#table").on("click", ".off", function() {
$(this).addClass("on");
$(this).removeClass("off");
});
});
function switchData(object) {
$("#table").contents("div").remove();
if (!('rows' in object)) {
var rows = [];
Object.keys(object).forEach(function (key) {
if (key != 'rows') {
rows.push($('<div class="row on">' + object[key].name + '</div>'));
}
});
object.rows = rows;
}
object.rows.forEach(function (row) {
$('#table').append(row);
});
}
Run Code Online (Sandbox Code Playgroud)
这使得行代表一个团队.当用户在浏览器会话期间查看不同的团队时,行将保留其颜色突出显示.
这是我的HTML:
<div id="displayObject1">
<span>Display object 1</span>
</div>
<div><hr></div>
<div id="displayObject2">
<span>Display object 2</span>
</div>
<div id="table">
</div>
Run Code Online (Sandbox Code Playgroud)
还有一些CSS显示哪些列表项是"开"和"关".
.on {
background-color: green;
}
.off {
background-color: red;
}
Run Code Online (Sandbox Code Playgroud)
页面如何记住颜色突出显示?
如果要使用本地存储使团队列表的状态在浏览器会话中保持不变,则必须维护状态的逻辑表示,并在状态更改时将其保存为字符串。
JSON.stringify允许您将 JavaScript 对象编码为 JSON 字符串。例如,每当修改名为 的全局对象时,您都可以调用如下函数pageState:
function savePageState() {
localStorage.setItem('pageState', JSON.stringify(pageState));
}
Run Code Online (Sandbox Code Playgroud)
要检索页面加载时的页面状态,您可以执行以下操作:
pageState = JSON.parse(localStorage.getItem('pageState'));
if (pageState === null) {
pageState = {
teams: teams
};
savePageState();
} else {
teams = pageState.teams;
}
Run Code Online (Sandbox Code Playgroud)
如果pageState未在之前的会话中保存,现在将创建它并保存到本地存储。否则,我们会查阅pageState可用于恢复团队列表之前外观的数据。
此代码示例假设全局对象teams包含与页面状态相关的信息。您可以向页面状态对象添加更多属性以存储更多信息。例如,要记住当前显示的是哪个团队,您可以执行以下操作:
pageState.showTeam = teamName;
Run Code Online (Sandbox Code Playgroud)
然后你可以pageState.showTeam在初始化页面内容的时候参考一下,大概是这样的:
if (teamName == pageState.showTeam) {
showTeam(teamName);
$(label).addClass('selected');
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个页面来演示这种方法。我无法将其作为片段包含在我的答案中,因为它localStorage是沙盒的,但您可以在此处访问该页面:
http://michaellaszlo.com/so/click-rows/
我已经重新组织了您的团队数据以启用动态页面初始化。现在,每个团队对象都包含一个人员对象数组。
当用户单击团队成员的姓名时,CSS 类selected会在 HTML 元素上切换,并通过切换其属性来更新相应的人员对象selected:
function memberClick() {
$(this).toggleClass('selected');
this.person.selected = (this.person.selected ? false : true);
savePageState();
};
Run Code Online (Sandbox Code Playgroud)
该函数在构建 HTML 表示时showTeam检查人员的属性,并在适当的情况下添加 CSS 类。这使得恢复上次会话的页面视觉外观成为可能。selectedselected
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |