在没有jQuery的情况下访问'data-'属性


Answers:


121

这里,我找到了这个例子:

<div id='strawberry-plant' data-fruit='12'></div>
<script>
    // 'Getting' data-attributes using getAttribute
    var plant = document.getElementById('strawberry-plant');
    var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'
    // 'Setting' data-attributes using setAttribute
    plant.setAttribute('data-fruit', '7'); // Pesky birds
</script>

因此,它看起来非常可行。

更新:由于微软现在(2020年)将逐步淘汰旧的Internet Explorer引擎,而改用基于Chromium的Edge,因此该dataset资产很可能在任何地方都可以使用。一段时间以来,例外情况仍然是仍被强制使用IE的组织和公司网络。不过,在撰写本文时-jsPerf仍然显示get / setAttribute方法比使用数据集更快,至少在Chrome 81上是如此。


这似乎是正确的方法。另外,您可能需要执行以下操作:document.getElementById('strawberry-plant')。setAttribute('data-fruit','Some Data Here');
sage88 2014年

2
请查看下面有关数据集的tomor答案-这是正确的答案,除非您必须支持不推荐使用的网络浏览器(IE),如果真是这样,这对您来说真的很不幸。所有现代浏览器版本均支持HTML5和ECMAScript 5(肯定)和6几乎完全在这一点上。
Carnix

似乎比数据集更具可读性。大多数开发人员
乍一看

39

您可以使用数据集属性。如:

element = document.getElementById("el");
alert(element.dataset.name); // element.dataset.name == data-name

3
注意:虽然完全正确,但这仅适用于HTML5兼容的浏览器。使用该getAttribute方法可在大多数浏览器上使用。
fredrik

3
尽管不一定要与不推荐使用的浏览器(例如,所有版本的IE)向后兼容,但这是正确的答案。当时(2013年)当然是前瞻性思考,但现在已经过去了5年,这是应该做到的方式。
Carnix


-1

我认为您可以尝试以下方法:

var ele = document.getElementById("myelement");
if (ele.hasOwnProperty("data")) {
  alert(ele.data);
}

或使用

alert(ele['data-property']);

1
从MDN文档开始,最好使用getAttribute方法,因为它更快,我在下面引用:**另外,与将数据存储在JS数据仓库中相比,读取数据属性的性能很差。使用数据集甚至比使用getAttribute()读取数据还要慢。**-链接
razzbee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.