2011-07-04 6 views
0

Indépendant de l'attribut HTML id, existe-t-il un bon moyen de définir un identifiant d'élément unique en JavaScript à utiliser avec le stockage local HTML5?Identificateur unique JavaScript pour le stockage local

localStorage.setItem('uniqueid', value); 

pourrait le faire:

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

localStorage.setItem(namespace + uid, value); 

Le problème est que si les changements de l'ordre des éléments, les données ne sont pas associées à l'élément droit:

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

localStorage.getItem(namespace + uid); 

EDIT - exemple réel

Code HTML:

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

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

Maintenant, je me sers l'index de chaque élément de la liste pour créer un identifiant unique. Je pourrais mettre en un uid de données avec HTML comme ceci:

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

est-il un moyen de définir dynamiquement l'identifiant unique?

+0

Pouvez-vous utiliser un simple compteur? Affectez la valeur à une propriété * data- * de l'élément et à une clé des données associées. Incrémentez-le chaque fois que vous ajoutez un autre élément et un bloc de données. – RobG

+0

Je ne suis pas sûr de comprendre complètement votre suggestion. Pouvez-vous élaborer avec un exemple? – DADU

+0

Créez un identifiant unique, utilisez 'node.setAttribute ('data-myId', id)' pour ajouter l'élément, puis ajoutez-le au stockage local. Vous pouvez également le stocker dans un objet en tant que {..., id: node, ...} 'afin que l'accès soit rapide aussi. – RobG

Répondre

1

Si les données stockées dépendent de l'ordre spécifique des éléments, cela semble indiquer qu'il ne sera pas utile de conserver ces données au-delà de la page en cours. Vous pouvez regarder data-* attributs tels que jQuery implémente dans $.data.

Cela vous permettra de stocker des données arbitraires associées à n'importe quel élément.

+1

"jQuery garantit que les données sont supprimées lorsque les éléments DOM sont supprimés via les méthodes jQuery et lorsque l'utilisateur quitte la page." Le point d'utiliser le stockage local est de se souvenir des données lorsque l'utilisateur quitte la page. – DADU

+0

Je ne veux pas que cela dépende de l'ordre spécifique des éléments, mais c'est le seul moyen que je connaisse actuellement. C'est pourquoi je demande une alternative. – DADU

+0

Oui, je comprends le point de localStorage. Mais je suis curieux de savoir comment vous pouvez vous attendre à savoir quelles données vous avez dans localStorage est associé aux éléments une fois qu'ils sont dans un ordre différent. Vous avez vraiment besoin d'un identifiant spécifique à l'application pour faire l'association, mais il semble que vous n'en ayez pas. –

-2
localStorage.setItem(localStorage.length, value); 

même que la création d'un compteur et incrémenter chaque fois

+4

Cela fonctionnera jusqu'à ce que vous supprimiez Quelque chose –

+0

Bon point Mike! –