獨立於HTML id屬性,是否有一種很好的方法可以在JavaScript中定義唯一的元素標識符以便與HTML5本地存儲一起使用?本地存儲器的JavaScript唯一標識符
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',
}));
});
});
現在我使用每個列表項的索引創建一個唯一的標識符。我可以設置數據的uid與HTML像這樣:
<li data-uid="foo">foo</li>
有沒有辦法動態設置的唯一標識?
你可以使用一個簡單的計數器遞增呢?將值賦給元素的* data- *屬性,並賦給相關數據的一個鍵。每次添加另一個元素和數據塊時增加它。 – RobG
我不確定我完全理解你的建議。你能用一個例子來闡述一下嗎? – DADU
創建一個唯一的ID,使用'node.setAttribute('data-myId',id)'將其添加到該元素,然後將其添加到本地存儲。您還可以將它作爲'{...,id:node,...}存儲在一個對象中,因此訪問速度也很快。 – RobG