Dom 每当在返回的元素上使用.data时,jquery.each都会生成“undefined”

Dom 每当在返回的元素上使用.data时,jquery.each都会生成“undefined”,dom,iteration,jquery,Dom,Iteration,Jquery,我试图用一个特定的数据属性集来处理所有select元素 我已经让循环拾取元素,但是每当我试图找到它的其他数据属性的值时,我都会收到未定义的错误消息 以下是循环: $('select[data-hm-observed="1"]').each(function(idx, sel) { alert(sel.getAttribute('data-hm-url')); alert(sel.data('hmUrl')); }); 在循环中,第一个警报起作用,但第二个警报产生

我试图用一个特定的数据属性集来处理所有select元素

我已经让循环拾取元素,但是每当我试图找到它的其他数据属性的值时,我都会收到未定义的错误消息

以下是循环:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
        alert(sel.getAttribute('data-hm-url'));
        alert(sel.data('hmUrl'));
});
在循环中,第一个警报起作用,但第二个警报产生:

TypeError:“未定义”不是函数 “sel.data”hmUrl

如果我使用Safari控制台,我可以获取select对象,将其放入变量中,并毫无疑问地查询其数据属性

似乎.each对sel变量内容有影响-但我不明白是什么

使用jquery1.7.1

更新:

刚刚发现,如果我更改循环,使其再次显式地获取元素,那么所有这些都可以工作:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
            xx = $(sel);
        alert(sel.getAttribute('data-hm-url'));
        alert(xx.data('hmUrl'));
});
这是正确的解决方案吗? 我是否可以由此推断,通过传递到循环中的元素。每个元素都没有被jquery“处理”,我必须自己通过$。。。因此jquery对它做了自己的事情-这感觉不太对-但是它在工作。

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

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

另见 sel在这里是一个DOM对象,不具备jQuery对象的能力。首先,您应该将此DOM对象转换为jQuery对象,如下所示:

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

另见
太好了,谢谢。有什么原因吗。每个都以dom而不是jquery对象的形式返回它?@Houdi在后台,jquery集合是一个dom元素数组。迭代时,您将获得这些DOM元素。基本上,当您执行$sel时,您将创建一个只包含这一个对象的新jQuery集合。在一些情况下,您不需要jQuery方法,简单的DOM就足够了。中的console.logthis.id。每个都可以正常工作。非常好,谢谢。有什么原因吗。每个都以dom而不是jquery对象的形式返回它?@Houdi在后台,jquery集合是一个dom元素数组。迭代时,您将获得这些DOM元素。基本上,当您执行$sel时,您将创建一个只包含这一个对象的新jQuery集合。在一些情况下,您不需要jQuery方法,简单的DOM就足够了。中的console.logthis.id,每种方法都可以正常工作。