【发布时间】:2014-07-05 08:45:32
【问题描述】:
我在玩 HTML5 的 attr-data-* 属性和相应的 javascript dataset
我正在做很多动态表单处理,所以我最终得到了这样的东西:
<input data-feaux="bar" data-fizz="buzz"/>
由于HTMLElement.dataset 返回DOM string map,我能弄清楚如何将其转换为本机对象的唯一方法是:
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 string map 转换为对象时,不会填充数组(即上面的代码不起作用)
编辑 2
仔细看,实际上是DOM string map,而不是object。更正原始问题中的拼写错误以反映这一点。
【问题讨论】:
-
它已经是一个对象。为什么你希望它是原生的?
-
@cookiemonster 因为
DOM string object不喜欢被推入一个数组并且我松开了钥匙;我已经编辑了我的问题以举个例子 -
在什么浏览器中不起作用?在 Firefox 中对我来说效果很好。 ...也可以在 Chrome 中使用。
-
...无论如何,如果你想存储
dataset对象,你也可以存储元素本身,因为存储dataset将保留对元素的引用,因为 @ 987654335@ 依赖于元素来工作。 -
@cookiemonster 是的,我可以让它在 Chrome 的控制台中工作,但出于某种原因从脚本文件加载它或使用无头网络浏览器运行它,
DOM string maps不要走正确进入阵列。我要做更多的测试;这可能是更高层的错误:P
标签: javascript html data-binding