错误.MAP()时,回调函数返回一个jQuery对象
问题描述:
http://jsfiddle.net/mblase75/NfzbA/ - 在JavaScript控制台中使用jQuery 1.9.1错误.MAP()时,回调函数返回一个jQuery对象
var $opts = $('.plant-page').map(function (i, el) {
return $('<option>');
}).appendTo('#change-page select');
错误说:Uncaught TypeError: Cannot read property 'ownerDocument' of undefined
当我切换到jQuery的1.8。 3,结果如预期 - 选项元素附加到选择:http://jsfiddle.net/mblase75/NfzbA/2/
我做错了什么?
答
在jQuery的1.9.1,如果我重写.map()
回调函数返回一个DOMElement,而不是一个jQuery对象,它按预期工作:http://jsfiddle.net/mblase75/NfzbA/3/
var $opts = $('.plant-page').map(function (i, el) {
return $('<option>').text(this.id)[0];
}).appendTo('#change-page select');
当我提出这是一个jQuery的bug(http://bugs.jquery.com/ticket/13567 ),有人告诉我:
分辨率设置为notabug
您正在尝试添加jQuery对象内的jQuery对象 ,因为您通过
$.fn.map()
将jQuery对象 插入到所述jQuery对象中。这不支持,但 足够明显。我们通常不会列出所有 不能包含在jQuery集合中的所有内容,因为存在无限的 列表。你的重写看起来更好。
所以:即使这在jQuery 1.8中工作,它被认为是预期的行为而不是错误的回报。 .map()
回调应始终返回DOMelements而不是jQuery对象。
我同意在错误报告中的评估。所有jQuery迭代方法都以这种方式工作。在回调方法内部,'this'是一个DOM节点,而不是一个jQuery对象,返回的值应该是相同的形式。 '$([$(),$(),$()])'也不再适用于过去。 – 2013-03-05 16:12:01
@KevinB我同意 - 但是再次,'$($ some-jQuery-object)'仍然返回一个有效的jQuery对象! – Blazemonger 2013-03-05 17:02:48