【问题标题】:dataset vs .data - Difference?数据集与 .data - 区别?
【发布时间】:2014-06-29 02:10:38
【问题描述】:

我正在读取数据属性字段中的一些值。我见过两种读取数据的简单方法,如下所示:

var webappData = document.getElementById('web-app-data'),
    rating = webappData.dataset.rating;

var effectData = $('.effects-list li'),
    creative = effectData.filter('[data-creative]').data("creative");

我的问题是,其中哪些性能更​​好,或者它们真的不同?

我有一个页面,其中包含许多要访问的数据属性,我想使用性能最佳的方法。

任何有关理解两者之间差异的指导都将不胜感激。当我特别关注性能时,如果有其他原因需要使用其中一个,我也想知道这一点。

【问题讨论】:

  • 我会说纯 JS 更快或等于 jQuery
  • 因为 .dataset 是纯 Javascript 我想它应该比使用 .data() 更快(毕竟,至少你错过了一个函数调用),尽管差异可能是几毫秒。您始终需要考虑的唯一一件事是,并非每个浏览器都知道 .dataset。浏览器兼容性参考这里:developer.mozilla.org/en-US/docs/Web/API/HTMLElement/…

标签: javascript jquery dataset custom-data-attribute


【解决方案1】:

dataset 是包含数据属性的元素的本机属性,它是一个新的(ish)添加,因此仅在 IE11+、Chrome 8+、FF 6+ 等中受支持。

更跨浏览器的解决方案是直接获取属性

webappData.getAttribute('data-rating');

data()是一个jQuery方法,除了使用HTML5数据属性来设置初始值如果内部不存在,它与数据集没有任何共同之处。

data() 将您传递的任何数据存储在由 jQuery 创建的内部对象中,因此这会失败

$(element).data('key', 'value');

element.dataset.key // undefined

因为数据根本不存储在属性中,而是由 jQuery 内部存储。
获取和设置数据属性的 jQuery 等效项是 attr()

$(element).attr('data-key', 'value');

本机方法可能更快,但由于它们无法与 jQuery 的 data() 相比,这并不重要,但对于获取数据属性,我认为具有最佳浏览器支持的最快方法是

var rating = webappData.getAttribute('data-rating');

【讨论】:

  • 感谢您提供的信息。除了浏览器兼容性之外,还有其他理由使用.getAttribute 而不是.dataset
  • 确实有:我的经验是 .dataset 并非在所有浏览器中都可以使用(尤其是旧版 IE 无法使用)
  • 顺便说一句:As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to jQuery's data object. The treatment of attributes with embedded dashes was changed in jQuery 1.6 to conform to the W3C HTML5 specification.
  • 如果您想将其编辑到您的答案中,这是一个 JSPerf 测试,显示 getAttributedataset 快得多:jsperf.com/dataset-vs-getattribute-and-setattribute/13
  • dataset 项的值始终是字符串,而 jQuery 的 data() 保留由 .data(key, value) 设置的类型。 (dataset 返回 DOMStringMap;jQuery 的 data() 返回 jQuery 对象。)
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2011-12-08
  • 1970-01-01
  • 2021-11-28
  • 2015-03-16
  • 2021-12-23
相关资源
最近更新 更多