我有一个用例,需要从元素中获取多个html5数据属性。这发生在跨越许多元素的循环中,并将数据压入数组以进行缓存。
从进行一些研究看来,使用el.getAttribute('data-whatever')
比使用本机html5 dataset
方法更快,但我需要从同一元素中获取5个独立的数据属性。
dataset
方法允许您通过一次调用检索所有数据属性,然后使用标准对象点表示法(dataset.index,dataset.whatever,dataset.somethingelse)访问它们,而使用getAttribute
我必须重复调用getAttribute来检索所有需要的数据。
如果使用非兼容属性,我当然可以简单地使用点表示法来访问加速此功能的属性。但是使用html5数据属性这不起作用(即el.data-无论什么总是未定义)。
我希望保持符合标准,因此我正在寻找检索这些多数据属性的最快方法。
提前致谢。
答案 0 :(得分:5)
我做了这个测试:
http://jsperf.com/dataset-vs-getattribute-2
测试如下:
数据集全部:
var data = el.dataset;
getAttribute all:
var data = {
id: el.getAttribute('data-id'),
user: el.getAttribute('data-user'),
dateOfBirth: el.getAttribute('data-date-of-birth')
};
数据集单一:
var user = el.dataset.user;
getAttribute single:
var user = el.getAttribute('user');
https://developer.mozilla.org/en-US/docs/Web/API/element.dataset
答案 1 :(得分:3)
只是基准测试:
http://jsperf.com/dataset-access-vs-getattrb
在Chrome上使用getAttribute
时,它看起来仍然快2倍。
我正在使用noop
来防止JIT对其进行优化。