我如何将javascript对象存储为数据属性并进行编辑

时间:2015-01-16 12:33:02

标签: jquery

我正在生成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);

但是圆顶中的数据仍然是相同的,当我稍后尝试引用它时

1 个答案:

答案 0 :(得分:5)

我认为你可能会因为你在元素的实际DOM属性中看到的内容而误导(如开发人员工具中所见)。

创建新的jQuery对象时,受影响节点上的任何HTML5 data- *属性(如果有)都会自动传输到jQuery实例的内部.data()存储。因此,“数据类别”正在被jQuery 创建 时扫描到对象中。

当使用jQuery的.data()方法时,它不会尝试更新底层DOM,因为它使用了两倍的开销(操纵DOM比在纯JavaScript中工作慢)。

换句话说, jQuery.data 与使用HTML5 data-属性相同。

如果您在为其分配修改后的类别哈希后调用jQuery(el).data(“categories”),则很可能会返回您所期望的内容。 :)