这似乎是一件简单的事情,但我一直在"未定义"
我正在尝试"数据 - " HTML5属性,我循环遍历一堆看似这样的div标签:
<div id="myEvent"
data-scheduledOn="1399985100000"
data-eventStatus="3">
我正在循环使用这样的一堆:
$('[id="myEvent"]').each(function(index, divItem) {
alert($(divItem).data("scheduledOn"));
}
但我一直在&#34;未定义&#34;如果我这样做(获取属性)它可以正常工作:
alert($(divItem).attr("data-scheduledOn"));
那我错过了什么?
答案 0 :(得分:0)
&#34; .data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,这种方式不会受到循环引用的影响,从而导致内存泄漏。&#34;
至少在这个时候,要使用.data函数,你必须使用函数附加数据,然后才能使用.data函数读回。
如果需要读取预先存在的数据,请使用.attr或.prop函数。
答案 1 :(得分:0)
好像这是Hamza Kubba建议的命名问题,但有点不同......
如果我将数据属性的名称更改为&#34; data-scheduled-on&#34;我可以通过.data(&#34; scheduledOn&#34;)或使用data-scheduledon和.data(&#34; scheduledon&#34;)检索它。
所以不要将CAPS用于数据名称是这个故事的寓意!
答案 2 :(得分:0)
请注意,根据HTML 5规范,属性名称不应包含任何大写字母和某些浏览器,例如FF&amp; Chrome会将任何大写字母更改为小写。这就是为什么如果您使用小写名称访问数据属性,以下演示的工作原理:
http://jsfiddle.net/fiddleyetu/5LdQd/
$('div.myEvent').each(function(index, divItem) {
console.log($(divItem).data("scheduledon"));
console.log( $(divItem).data("eventstatus") );
});
Ans,因为在具有相同ID的页面上不能有多个元素,我已经为演示使用了类选择器。
道德:不要使用大写;您的浏览器可能并不总是那么理解&#39;。