Уникальный идентификатор JavaScript для локального хранилища - PullRequest
1 голос
/ 05 июля 2011

Независимо от атрибута HTML id, есть ли хороший способ определить уникальный идентификатор элемента в JavaScript для использования с локальным хранилищем HTML5?

localStorage.setItem('uniqueid', value);

Может сделать это:

var uid = ancestor.index(element); // uid = 0

localStorage.setItem(namespace + uid, value);

Проблема в том, что при изменении порядка элементов данные не связаны с нужным элементом:

var uid = ancestor.index(element); // another element is prepended, so uid = 1

localStorage.getItem(namespace + uid);

РЕДАКТИРОВАТЬ - реальный пример

HTML код:

<ul>
<li aria-hidden="true">foo</li>
<li>bar</li>
</ul>

JQuery код:

var ul = $('ul');

ul.find('li').each(function() {

    var element = $(this),
        uid = ul.index(element),
        data = JSON.parse(this.storage.getItem(uid));

    // load
    console.log(data.hidden);

    // save
    this.$window.bind('unload', function() {

        localStorage.setItem(uid, JSON.stringify({
            hidden: typeof element.attr('aria-hidden') === 'string',
        }));
    });
});

Теперь я использую индекс каждого элемента списка для создания уникального идентификатора. Я мог бы установить data-uid с помощью HTML следующим образом:

<li data-uid="foo">foo</li>

Есть ли способ динамически установить уникальный идентификатор?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Если хранимые данные зависят от определенного порядка элементов, это, по-видимому, говорит о том, что не будет полезно сохранять эти данные за пределами текущей страницы. Возможно, вы захотите взглянуть на data-* атрибуты, такие как jQuery, в $.data.

Это позволит вам хранить произвольные данные, связанные с любым элементом.

0 голосов
/ 29 июля 2011
localStorage.setItem(localStorage.length, value);

То же самое, что создание счетчика и увеличение его каждый раз

примечание: если вы когда-либо удаляете запись, следующий «новый» идентификатор будет таким же, как и последний.

  • 0 элементов в локальном хранилище, следующий созданный идентификатор - 0
  • 1 элементов в локальном хранилище, следующий созданный идентификатор - 1
  • 2 элемента в локальном хранилище, следующий созданный идентификатор - 2
  • удалить идентификатор элемента 1
  • 2 элемента в локальном хранилище, следующий созданный идентификатор равен 2 (который перезаписывает предыдущая запись id 2.

Один из возможных обходных путей - пометить элементы как «удаленные», но не удалять их. Очевидно, что это не будет работать во всех случаях.

Спасибо @ Mike-robinson за указание на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...