在DOM中存储数据的正确方法是什么

时间:2010-12-22 06:37:19

标签: javascript asp.net jquery html dom

我最近在各种HTML元素中使用了title标签,以便在DOM中以JSON格式存储数据。

这是一种不好的方法(我假设是这样)?实现这一点的正确方法是什么,适用于jQuery?通过“运作良好”我的意思是

$("myButton").click(function (e) {
     var myData;
     eval("myData=" + $(this).attr("title"));
});

效果很好,但我又假设有更好的方法可以做到这一点吗?

PS:BTW HTML元素的标题标签实际上是如何工作的?我似乎无法找到它最终被使用的地方?

PSS:我还可以获得基于jQuery和非jQuery的响应吗? (抱歉要挑剔)

4 个答案:

答案 0 :(得分:9)

eval("myData=" + $(this).attr("title"));

这几乎是打击你的法律理由! (j / k)

您应该使用自己的命名空间对象来“全局”存储数据。在这种情况下,全局在您的应用程序代码中仅表示全局,而不是在浏览器中使用global objectwindow)。

var my_application = {};

$('myButton').click(function() {
  my_application.myData = $(this).attr('title');
});

这当然是一个非常基本的策略。在您的特定情况下,您还可以使用jQuery的.data()方法将数据附加到DOM节点。

$('myButton').click(function() {
   $.data(this, 'myData', this.title);
});

参考:.data()jQuery.data()

答案 1 :(得分:8)

在您的示例中,我建议您执行以下操作,但不会让您面临'eval'的安全风险:

myData = JSON.decode($(this).attr("title"));

通常,这是保存非安全数据的有效方法。您还有许多其他选择:

答案 2 :(得分:4)

使用jquery data()

  

jQuery.data()方法允许我们   将任何类型的数据附加到DOM   元素以一种安全的方式   循环引用,因此是免费的   从内存泄漏。 jQuery确保了这一点   DOM元素时删除数据   通过jQuery方法删除,和   当用户离开页面时。我们可以   为a设置几个不同的值   单个元素并检索它们   后:

jQuery.data(document.body, 'foo', 52);

答案 3 :(得分:0)

在jQuery世界中,通常认为使用元数据插件是一种最佳实践,因为它是一个官方的jQuery插件,并且还支持HTML5数据属性。有关详细信息,请查看此http://docs.jquery.com/Plugins/Metadata/metadata