如何使用jquery获取数据属性.data()?在哪种情况下,html5 data-*属性转换为小写和camelcase?使用自定义属性存储数据时要遵循的主要规则是什么?
<input type="button" class="myButton" value="click me" data-productId="abc"/>
<input type="button" class="myButton" value="click me" data-product-id="abc"/>
<input type="button" class="myButton" value="click me" data-PRODUCT-ID="abc"/>
<input type="button" class="myButton" value="click me" data-ProDUctId="abc"/>
Run Code Online (Sandbox Code Playgroud) 我正在玩HTML5 的attr-data-*属性和相应的javascript 数据集
我正在做很多动态表单处理,所以我最终得到这样的东西:
<input data-feaux="bar" data-fizz="buzz"/>
Run Code Online (Sandbox Code Playgroud)
由于HTMLElement.dataset返回a DOM string map,我唯一可以弄清楚如何将其转换为本机对象的方法是:
var obj = JSON.parse(JSON.stringify(input_el.dataset))
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
编辑:
我为什么要这样做?假设我有很多很多这样的元素.我想循环遍历它们并将它们推入数组以便稍后处理,即
elements = document.querySelectorAll("input")
my_data_array = []
for(var i = 0; i < elements.length; i++) {
my_data_array.push(elements[i].dataset)
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个对象数组,即[{feaux: "bar", fizz:"buzz"}....]我可以使用.
但是,当我没有转换DOM string map为对象时,数组不会被填充(即上面的代码不起作用)
编辑2
仔细观察,它实际上是一个DOM string map,而不是一个object.纠正原始问题中的拼写错误以反映这一点.
我正在玩获取link标记的属性,似乎有几种方法来访问属性:
document.getElementsByTagName("link")[0]['media']
document.getElementsByTagName("link")[0].media
document.getElementsByTagName("link")[0].getAttribute('media')
document.getElementsByTagName("link")[0].attributes['media']
Run Code Online (Sandbox Code Playgroud)
它接近于荒谬的相同数据有多少路径.这些方法中的一种远远优于其他方法吗?
我有一系列看起来与此类似的对象:
<a data-type="file" data-path="/some/path" data-size="849858">Link</a>
Run Code Online (Sandbox Code Playgroud)
我想创建一个动态拉动每个数据属性的函数,所以如果我添加类似"data-icon"或任何其他数量的属性,函数仍会返回所有数据属性的数组,如:
{
"type" : "file",
"path" : "/some/path",
...
}
Run Code Online (Sandbox Code Playgroud) 我有这样的html标签:
<il class="currItem" data-sourcemp3="http://**">
<il class="currItem" data-sourcemp4="http://**">
Run Code Online (Sandbox Code Playgroud)
我想得到这个数据值,即使这个mp3或mp4我写道:
var A = $('.currItem').attr("data-source(.+)")
console.log(A);
Run Code Online (Sandbox Code Playgroud)
要么:
var srcName = new RegExp(/data-source.+/g);
var A = $('.currItem').attr(srcName)
console.log(A);
Run Code Online (Sandbox Code Playgroud)
我得到"未定义"
我是怎么做到的 提前致谢
jquery ×3
html5 ×2
javascript ×2
arrays ×1
attributes ×1
data-binding ×1
dom ×1
html ×1
jquery-data ×1
regex ×1