在涉及到localStorage时,我似乎无能为力。我想通过切换一个类来设置一个喜欢div组中任何div的方式。我可以让toggleClass处理单个div并保存,但localStorage将所有div保存为收藏夹,而不仅仅是设置了toggleClass的div。显然我错过了一些东西。
localStorage代码:
if (typeof (localStorage) == 'undefined') {
document.getElementById("result").innerHTML = 'Your browser does not support HTML5 localStorage. Try upgrading.';
} else {
if (localStorage.getItem("fav") != null) {
getFav = localStorage.fav;
$(".item").addClass('favorites');
}
}
$(document).ready(function () {
$('.btn').on('click', function () {
getFav = localStorage.fav;
//$(".item").removeClass('favorites');
//localStorage.removeItem('background');
$(this).closest(".item").toggleClass('favorites');
if ($(this).closest(".item").hasClass('favorites')) {
localStorage.setItem('fav', 'favorites');
}else{
localStorage.removeItem('fav');
}
});
});
问题在于
$(".item").addClass('favorites');
它将类添加到所有.items中,显然它不应该。
任何帮助将不胜感激!
答案 0 :(得分:2)
如果其他答案问题不够,这里有一个解决方案,允许你有多个div,它们将在重新加载后维持状态,而不仅仅是一个。
http://codepen.io/anon/pen/WvmEbX
if (typeof(localStorage) == 'undefined') {
document.getElementById("result").innerHTML =
'Your browser does not support HTML5 localStorage. Try upgrading.';
} else {
$(".item").each(function(i, el) {
if (localStorage['fav' + i] == 'favorites') {
$(this).addClass('favorites');
}
});
}
$(document).ready(function() {
$('.btn').on('click', function() {
var $item = $(this).closest('.item');
var index = $('.item').index($item);
$item.toggleClass('favorites');
if ($item.hasClass('favorites')) {
localStorage.setItem('fav' + index, 'favorites');
} else {
localStorage.removeItem('fav' + index);
}
});
});
答案 1 :(得分:0)
您有2 class
个HTML divs
尝试使用ID
属性而非使用class
,但请确保您指定两个不同的ID
这些课程发生了冲突。
<div id="testOne" class="item">Test
<div class="holder">
<button class="btn">Toggle</button>
</div>
</div>
<div id="testTwo" class="item">Test
<div class="holder">
<button class="btn">Toggle</button>
</div>
</div>
正如您所看到的,我已为每个属性分配了ID
属性,现在您将为该特定ID
添加一种样式,以便它们不会发生冲突。
答案 2 :(得分:0)
根据您对之前answer 的回复(ID过于繁琐)
这是另一种方法。您可以将index
用作localStorage
值。 HOWEVER ,item
元素的数量不得更改,并且不会更改排序。
if (typeof(localStorage) == 'undefined') {
document.getElementById("result").innerHTML =
'Your browser does not support HTML5 localStorage. Try upgrading.';
} else {
// highlight the selected item
if (localStorage.getItem("fav") != null) {
getFav = localStorage.fav;
$('.item').eq(getFav).addClass('favorites');
}
}
$(document).ready(function() {
$('.btn').on('click', function() {
getFav = localStorage.fav;
// clear all highlights
$(".item").removeClass('favorites');
// get the selected item then its index, then store in getFav
var selectedItem = $(this).closest(".item");
getFav = $('.item').index(selectedItem);
selectedItem.toggleClass('favorites');
// store the value in localStorage
if (selectedItem.hasClass('favorites')) {
localStorage.setItem('fav', getFav);
} else {
localStorage.removeItem('fav');
}
});
});
这是一个codepen:http://codepen.io/anon/pen/pJYroL
注意我建议您尽可能将ID应用于元素。那会更灵活。 :)