2015-01-16 41 views
1

我正在生成json並將其存儲爲數據屬性。 例如如何將JavaScript對象存儲爲數據屬性並對其進行編輯

data-categories="{"2":{"categoryId":"2","name":"how to's"},"5":{"categoryId":"5","name":"about us"},"6":{"categoryId":"6","name":"proucts"}}" 

當我以後嘗試編輯並保存新的json時,它不會被保存,舊的dat仍然存在。

例如

//獲取現有類別 var currentCategories = $('li#'+ $(this).data('backgroundid')+'.categoryTags .addCategory')。data('categories'); //獲取名稱,如果從at到鏈接
var newCategory = {'tagid':$(this).data('categoryid'),'name':$(this).data('categoryname') } currentCategories = [$(this).data('backgroundid')]。push(newCategory); //當我在這裏記錄的對象很精緻包含舊類別和新的類別

//save the new string back to the data attribute of li elsewhere on page 
    $('li#'+ $(this).data('pageid')+' .categoryNames .addCategory').data('categories',currentCategories); 

但該數據仍然在圓頂一樣,當我嘗試以後引用它

+0

請包括您正在使用的代碼來真正選擇'data-categories'屬性,因爲沒有它,this'沒有上下文。 –

+0

首先json它不好,數據類別=「{....}」應該是數據類別= {...} – hiero

+0

'數據仍然在圓頂相同'我想你的意思是DOM。 Ya,'data()'方法不會更新數據屬性。要更新屬性,請使用'attr()'方法,但是缺少一些上下文以使問題足夠清晰。爲什麼你需要更新屬性? –

回答

3

我認爲你可能會誤解你在元素的實際DOM屬性中看到的內容(如在開發人員工具中所看到的)。

當創建一個新的jQuery對象時,在受影響的節點上找到的任何HTML5數據屬性(如果有的話)會自動傳輸到jQuery實例的內部.data()存儲中。因此,「數據類別」正在被jQuery 掃描到對象上。

當使用jQuery的.data()方法時,它不會嘗試更新底層的DOM,因爲它會使用兩倍的開銷(操縱DOM比在純JavaScript中操作要慢)。

換句話說,jQuery.data一樣使用HTML5 data-屬性。

如果您在將jQuery(el).data(「categories」)分配給修改後的類別哈希值後調用它,它很可能會返回您期望的結果。 :)

+1

你完全正確,你已經解釋了我在開始觀察到的東西。 我一直在瘋狂追逐鵝,我試圖解決的問題與數據沒有存儲它就像你解釋的一樣。 –

+0

我們都在那裏,隊友......我自己包括在內。 :( – Alhadis

相關問題