我正在尝试处理具有特定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对它做了什么 - 这个感觉不对 - 但它的工作。
答案 0 :(得分:4)
sel
这里是一个DOM对象,没有配备jQuery对象的功能。首先,您应该将此DOM对象转换为jQuery对象,如下所示:
alert( $(sel).data('hmUrl') );
或者,您也可以使用$(this).data('hmUrl')
,因为this
将引用sel
(迭代中的当前DOM元素)。