Search code examples
javascriptjquerylocal-storagetoggleclass

localStorage, saving a class using toggleClass


I am clueless when it comes to localStorage it seems. I want to set up a way favorite any div in a group of div's by toggling a class. I can get the toggleClass to work on the individual div and be saved but localStorage saves all the div's as favorites, not just the one with the toggleClass set. Obviously I am missing something.

jsfiddle simple example

localStorage code:

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');
}

});
});

The issue resides in

$(".item").addClass('favorites');

It adds the class to all .items and obviously it should not.

Any help would be appreciated!


Solution

  • In case the other answers questions do not suffice here is a solution that allows you to have multiple divs that will maintain state after reload rather than just one.

    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);
        }
      });
    });