这个问题与我的相关,并解释了Jquery中的.data
方法.
除了与HTML5 data-*
元素属性的关系(例如,为什么)我将编码:
$('body').data("my_lab", {some:"object"}); // §1
代替
$('body').my_lab = {some:"object"}; // §2
(我最感兴趣的是Jquery选择器给出一个对象的情况,$('body')
如上所述)
后者(§2)似乎更具可读性和更短,我想比前者(§1)更有效率.当然data
是一个Jquery选择器(但我可以each
用来设置.my_lab
字段等...)
我甚至可能会考虑用丑陋的外观来改变DOM元素
$('body')[0].my_lab = {some:"object"}; // §3 is ugly
(这可能是未定义的行为,请看这个)
当然,my_lab
在JQuery实现中存在将字段名称与某些现有字段冲突的潜在问题; 但我认为my_
在字段名称中使用一些常见的后缀(如)应该就足够了.
FWIW,我只对最近在Linux上的Firefox(例如38或42)上的Jquery(例如Jquery 2.1.4)感兴趣.
换句话说,为什么在JQuery对象中添加我自己的字段会不受欢迎?
通过做
$('body').my_lab = {some:"object"};
您正在为指定的jQuery包装器设置值.您将无法使用其他选择器重新访问数据:
$('body').my_lab = {some:"object"}; console.log($('body').my_lab); // will log undefined
这就是使用数据基本上更可靠的原因
$('body').data('my_lab', {some:"object"}); console.log($('body').data("my_lab")); // will log {some: "object"}
对于第3个选项:$("body")[0].attr = { my : "object" }
部分:
jQuery数据方法在从页面操作dom/remove元素时(通过删除绑定的数据和东西)防止潜在的内存泄漏,并避免属性冲突(如设置domElement现有属性和其他微妙的东西)
所以基本上,如果你在你的应用程序中有jQuery,你真的没有任何理由通过在dom元素和javascript数据之间进行手动绑定来重新发明轮子.