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?
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
Je ne suis pas sûr de comprendre complètement votre suggestion. Pouvez-vous élaborer avec un exemple? – DADU
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