【发布时间】:2013-11-27 08:14:35
【问题描述】:
我经常读到这是不好的做法,因为它很难维护,但是这样做:
document.getElementsByTagName("h1")[0].foo = {"key":"value"};
与使用推荐的 jQuery 替代方案相比:
$.data($(document.getElementsByTagName("h1")[0]), "foo", {"key":"value"});
速度快得多:jsperf
data 和我的 hack 在像 Firebug 这样的调试器中是不可见的,因此从“可见性”的角度来看,使用任何一个都没有区别。
问题:
为什么直接在元素上存储信息是不好的做法?
【问题讨论】:
-
如果两者都看不到,说明你看的不够仔细。
-
$('h1').eq(0).data('foo', {"key":"value"})不是更好的主意吗? -
使用
data()的好处是,如果您在HTML 中使用data-*属性,它就会被填充 -
@frequent - 直接设置属性要快得多,这并不奇怪,但使用 data() 设置它是安全的,并且可以避免循环引用和 DOM 错误,这也是它速度较慢的主要原因。
-
@RohanKumar - 没关系,jQuery 创建一个名为 $.cache 的对象,每个附加了 data() 的元素只获得一个带有 ID 的属性,然后将该 ID 用作在 $.cache 对象中键入以查找存储的任何数据,因此数据永远不会存储在元素本身上,它位于一个单独的对象中,从而避免内存泄漏和循环引用等。要使用 HTML5 数据属性,.data( ) 总是首先检查 getAttribute('data-') 以查看是否有任何数据直接附加到标记中的元素。
标签: javascript jquery store jquery-data