LocalStorage, зацикливание на совпадающих идентификаторах, удаление из DOM - PullRequest
4 голосов
/ 31 декабря 2011

У меня есть несколько localStorage ключей, таких как Корзина, Просмотр и Корзина.

Вопрос в два раза:

1) Как можно зациклить хотя бы идентификаторы элементов в localStorage наиболее эффективным способом, и, если идентификатор уже существует, добавить атрибут класса или данных в соответствующий элемент DOM.

2) Как лучше всего создать отдельные списки последних 20 элементов из 3 localStorage Keys (Корзина, Корзина, Просмотр)? С точки зрения производительности, было бы лучше сделать это в той же функции Loop, что и pt1 в моем вопросе (т.е. также проверяет, существует ли идентификатор и добавляет ли класс в true)?

Вот что у меня есть:

HTML

<article data-id="548" data-date="Mon Dec 19 09:12:57"> <h1><a href="#">Title</a></h1> // section // footer <a href="#" data-context="trash">trash</a> </article>

JQuery

$tools.on("click", "a", function(e){
        var storeId = $(this).attr('data-context');         
        var selector = $(this).closest('article');
        var dataId = selector.attr('data-id');
        var pubDate = selector.attr('data-date');
        var postUrl = selector.find('a', 'h1').attr('href');
        var postTitle =  selector.find('h1').text();
        var $removable = $container.find( selector );
        setLocalStorage(storeId, dataId, postUrl, postTitle, pubDate);
        if (storeId == "Trash") {
                    $container.isotope( 'remove', $removable );
        };
        e.preventDefault();
    });

Функция Setter.

Переменные, такие как data-context="Trash" (ключ) и data-id="001" (id), передаются и сохраняются в соответствующем ключе.

function setLocalStorage(itemKey, dataId, postUrl, postTitle, postPub) {
        var ItemKey = itemKey;
        var timeStamp = new Date();
        var json = JSON.parse(localStorage.getItem(ItemKey));
        if(json == null)
        json = [];
        json.push({id:dataId,title:postTitle,url:postUrl,postPub:postPub,dataTimeStamp:timeStamp});
        // save the result array
        sessionStorage.setItem(ItemKey, JSON.stringify(json)) 

        // Notify user item added to Cart
        updateNotifications(ItemKey, json);
    }

LocalStorage заканчивается так: Trash [{"id":"418","title":"\n\t\t\t\t\t\t\t\t\tPost Title....//..."}]

Любая помощь здесь будет очень признательна.

С Новым годом!

Приветствие Ben

1 Ответ

0 голосов
/ 01 июня 2012

Сохранение одного объекта в ключе. Затем поработайте над объектом после его разбора.

var mysite = $.parseJSON(localStorage['mysite']);

Вы можете хранить все состояния в массиве вектора идентификаторов (например,

{
    cart:[idA,idB],
    viewed:[idZ,idX],
    trashed:[id1,id2]
}

Затем измените состояние и сделайте недействительными объекты, представляющие значения состояния. Я не уверен, что вы пытаетесь выполнить, но, возможно, просматриваемые элементы перемещаются в div, который находится ниже сгиба, элементы корзины и корзины перемещаются в скрытые элементы div, и соответствующие значки обновляются с соответствующим количеством и т. Д.

Если эти элементы хранятся в вашей БД, но не генерируются на каждой странице, вы можете ajax запросить данные элемента для заданных идентификаторов и сгенерировать ваши состояния из объектов, извлеченных, когда они вам нужны.

Может быть, вы хотите, чтобы все эти данные хранились локально, потому что они не хранятся где-то в БД, может быть полезна дополнительная информация.

...