每当.data用于返回的元素时,jquery .each就会产生'undefined'

时间:2012-03-02 10:46:22

标签: dom iteration jquery

我正在尝试处理具有特定data-属性集的所有选择元素。

我已经让循环工作以获取元素,但每当我尝试查找其他data-属性的值时,我都会收到undefined错误消息。

这是循环:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
        alert(sel.getAttribute('data-hm-url'));
        alert(sel.data('hmUrl'));
});

在循环中第一个警报起作用,但第二个警告产生:

  

TypeError:'undefined'不是一个函数(评估   'sel.data(' hmUrl ')')

如果我使用Safari控制台,我可以获取选择对象,将其放入变量中,并查询其data-属性而不会出现问题。

似乎.each()sel变量内容有影响 - 但我无法理解。

使用JQuery 1.7.1

更新

刚刚发现,如果我改变循环以便它再次明确地获取元素,那么一切都有效:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
            xx = $(sel);
        alert(sel.getAttribute('data-hm-url'));
        alert(xx.data('hmUrl'));
});

这是正确的解决方案吗? 我可以从中推断出.each传递给循环的元素还没有被jquery“处理”,并且我必须通过$(...)来自己拉它,以便jquery对它做了什么 - 这个感觉不对 - 但它的工作。

1 个答案:

答案 0 :(得分:4)

sel这里是一个DOM对象,没有配备jQuery对象的功能。首先,您应该将此DOM对象转换为jQuery对象,如下所示:

alert( $(sel).data('hmUrl') );

或者,您也可以使用$(this).data('hmUrl'),因为this将引用sel(迭代中的当前DOM元素)。