从元素 data-* 属性构建对象
Build an object from an elements data-* attributes
给定一个元素,例如:
<div data-answer="42" data-question="?"></div>
jQuery data()
将返回你期望的对象:
{answer: 42, question: "?"}
但是,jQuery 插件也会添加到元素的内部缓存中,并将包含在数据中:
{answer: 42, question: "?", somePlugin: Plugin}
我想从元素上存在的数据属性中创建一个对象,不包括添加到 jQuery 缓存中的任何内容。 有没有一种简单的方法,或者我是否必须遍历元素的属性,过滤掉非 data-* 属性并"手动"构造对象?
正如Oriol的回答中所述,elem.dataset
做到了我的要求,但是它仅受IE 11支持-我的情况需要IE 8 +的解决方案
遍历对象应该很容易,并过滤掉元素没有相应属性的键。
或者,香草JS可能有用:
var elem = document.getElementById('yourElementIDhere');
// or any other way of getting the element, doesn't matter
var attrs = elem.attributes;
var data = {};
var attr;
for( var i=0, l=attrs.length; i<l; i++) {
attr = attrs[i];
if( attr.name.substr(0,5) == "data-") {
data[attr.name] = attr.value;
}
}
你可以尝试 vanilla-js 的方式:
element.dataset;
另请参阅dataset
MDN 文章。
相关文章:
- 使用javascript在for循环中构建对象
- 将文档从构建对象上传到云搜索的最佳效果
- 在创建Javascript“类”的实例时,有没有办法构建对象,以便可以访问所有方法
- 用javascript动态构建对象键
- 用Javascript动态构建对象
- javascript构建对象.有什么区别和最好的方法
- Javascript从字符串构建对象
- 构建对象递归
- 使用javascript而不是php构建对象
- 使用变量构建对象数组时意外的标记
- 在不使用push的情况下构建对象数组会导致IE反向构建
- Angular 2通过http get request来构建对象
- 在循环中构建对象属性的语法
- 动态构建对象并注入变量
- jQuery -使用html5数据属性选择构建对象数组
- Js在属性分配中构建对象路径
- 用变量构建对象路径
- 在javascript中构建对象会返回错误
- JS递归地构建对象
- 如何在AngularJS中通过链接http调用来构建对象数组