.foo
不建议使用诸如此类的自定义属性有几个原因:
在某些浏览器中,根据您分配给自定义属性的内容,您最终可能会在 DOM 和 JS 之间出现循环引用,这在某些情况下会导致内存泄漏。
元素属性命名空间保留供浏览器使用和将来的属性使用。这就是为什么 HTML5 规范甚至建议所有自定义属性都以前缀作为data-
前缀,以将它们全部放在同一个名称中。因此,如果您开始向 DOM 元素随机添加属性,您现在或将来可能会与某些内容发生冲突。
jQuery.data()
创建了一个 javscript 对象,并将所有创建的数据元素存储.data()
在 javascript 中。它使用一个自定义属性作为.data()
世界的索引,以便它可以找到属于特定 DOM 元素的正确项目。它没有 DOM <--> JS 循环引用的机会,并且您使用的键.data()
永远不会与 DOM 属性名称冲突。
仅供参考,更常见的使用.data()
方法是通过 jQuery 对象上的方法,例如:
$("h1").eq(0).data("foo", {"key":"value"})
原生方法比 jQuery 替代品更快的情况并不少见,因为 jQuery 做得更多是为了提供其扩展的功能集和跨浏览器兼容性,尽管 jQuery 通常是因为它的速度不被注意。您通常会使用 jQuery 来帮助实现跨浏览器兼容性,并使用它的功能来加快您的开发工作。性能优化通常仅在您隔离和分析特定性能问题时才进行,并且有时可以用本机代码替换某些 jQuery 以加速特定操作。