使用jQuery循环访问DOM以获取一些数据属性值

时间:2014-05-14 02:07:13

标签: javascript jquery

这似乎是一件简单的事情,但我一直在"未定义"

我正在尝试"数据 - " 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"));

那我错过了什么?

3 个答案:

答案 0 :(得分:0)

http://api.jquery.com/data/

&#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;。