2010-12-22 121 views
7

我最近在各种HTML元素中使用标题标签以JSON格式在DOM中存储数据。什么是在DOM中存储数据的正确方法

这是一个坏的方法(我假设它是)?什么是正确的方式来完成这与jQuery合作?通过“效果很好”我的意思是

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

工作得很好,但同样我假设有一个更好的办法做到这一点没有?

PS:顺便说一句HTML元素的标题标记究竟是如何工作的?我似乎无法找到它实际上最终得到使用的地方?

PSS:我也可以得到一个基于jQuery和非jQuery响应? (对不起,是挑剔)

回答

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()

+0

lol ....坚持... Isnt myData,因为它被声明在它驻留的匿名函数的本地eval之上吗? – 2010-12-22 06:48:16

4

使用jQuery data()

的jQuery.data()方法允许我们在 的方式,是从 循环引用和安全连接的任何类型的数据,以DOM 元件因此免费从内存泄漏 。 jQuery确保在用户离开页面时通过jQuery方法删除DOM元素 并删除 数据。对于 单个元素,我们可以 设置多个不同的值,并检索它们 后来:

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

在jQuery的世界中,通常说是使用元数据插件最好的做法,因为它是一个官方jQuery插件并且还支持HTML5数据属性。欲了解更多信息,你可以看看这个http://docs.jquery.com/Plugins/Metadata/metadata

8

在你的榜样,我会建议做以下这并不会使您 'EVAL' 的安全隐患:

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

在一般来说,这是持有不安全数据的有效方法。您有许多其他选择太:

相关问题