我正在生成json并将其存储为数据属性。 e.g。
data-categories="{"2":{"categoryId":"2","name":"how to's"},"5":{"categoryId":"5","name":"about us"},"6":{"categoryId":"6","name":"proucts"}}"
当我稍后尝试编辑并保存新的json时,它没有被保存,旧的数据仍然存在。
e.g。
//获取现有类别
var currentCategories = $('li#'+ $(this).data('backgroundid')+'。categoryTags .addCategory')。data('categories');
//得到然后名字,如果从at到链接
var newCategory = {'tagid':$(this).data('categoryid'),'name':$(this).data('categoryname')}
currentCategories = [$(本)。数据( 'BACKGROUNDID')]推(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 :(得分:5)
我认为你可能会因为你在元素的实际DOM属性中看到的内容而误导(如开发人员工具中所见)。
创建新的jQuery对象时,受影响节点上的任何HTML5 data- *属性(如果有)都会自动传输到jQuery实例的内部.data()存储。因此,“数据类别”正在被jQuery 创建 时扫描到对象中。
当使用jQuery的.data()
方法时,它不会尝试更新底层DOM,因为它使用了两倍的开销(操纵DOM比在纯JavaScript中工作慢)。
换句话说, jQuery.data 不与使用HTML5 data-
属性相同。
如果您在为其分配修改后的类别哈希后调用jQuery(el).data(“categories”),则很可能会返回您所期望的内容。 :)