javascript - 将 data-* 属性转换为对象

标签 javascript html data-binding

我正在玩弄 attr-data-* HTML5 的属性和相应的 javascript dataset

我正在做很多动态表单处理,所以我最终得到这样的东西:

<input data-feaux="bar" data-fizz="buzz"/>

由于 HTMLElement.dataset 返回一个 DOM string map,我能弄清楚如何将其转换为 native 对象的唯一方法是:

var obj = JSON.parse(JSON.stringify(input_el.dataset))

有更好的方法吗?

编辑:

我为什么要这样做?假设我有很多很多这样的元素。我想遍历它们并将它们插入一个数组以便稍后处理,即

elements = document.querySelectorAll("input")
my_data_array = []
for(var i = 0; i < elements.length; i++) {
    my_data_array.push(elements[i].dataset)
}

现在我有一个对象数组,即 [{feaux: "bar", fizz:"buzz"}....] 我可以使用。

但是,当我不将 DOM 字符串映射 转换为对象时,数组不会被填充(即上面的代码不起作用)

编辑2

仔细一看,其实是一个DOM字符串映射,而不是一个对象。更正原始问题中的拼写错误以反射(reflect)这一点。

最佳答案

您可以使用 Object.assign

Object.assign({}, element.dataset) 

对于不支持 Object.assign 的浏览器,您可以使用 polyfill

关于javascript - 将 data-* 属性转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23703044/

相关文章:

javascript - 如何在组合框中获取选定的值?

javascript - HTML 必需属性不适用于 google recaptcha

html - 如何将文字放在图片之前?

html - 无法正确对齐文本 - Bootstrap

javascript - 用 30 个符号更新每个 h1 标签(h1 标签下方 3 个段落中的 10 个符号)

android - 如何在 Dialog 中使用数据绑定(bind)?

javascript - 正则表达式,加号与星号

javascript - "Embeddable"youtube视频无法嵌入

android - 在 com.example.widget.MyTableRow 上找不到值类型为 java.lang.String 的属性 'app:rowContentText' 的 getter

wpf - 在 WPF TreeView 中更改数据的上下文菜单