4

http://jsfiddle.net/mblase75/NfzbA/ -- 使用 jQuery 1.9.1

var $opts = $('.plant-page').map(function (i, el) {
    return $('<option>');
}).appendTo('#change-page select');

JavaScript 控制台中的错误说:Uncaught TypeError: Cannot read property 'ownerDocument' of undefined

当我切换到 jQuery 1.8.3 时,结果如预期 - 选项元素附加到选择:http: //jsfiddle.net/mblase75/NfzbA/2/

难道我做错了什么?

4

1 回答 1

3

在 jQuery 1.9.1 中,如果我重写.map()回调函数以返回 DOM 元素而不是 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 错误 ( http://bugs.jquery.com/ticket/13567 ) 提交时,有人告诉我:

分辨率设置为notabug

您正在尝试附加一个 jQuery 对象内的 jQuery 对象,因为您通过$.fn.map(). 这不受支持,但很明显。我们通常不会列出不能在 jQuery 集合中的所有内容,因为做错的可能性是无限的。你的重写看起来更好。

所以:尽管这在 jQuery 1.8 中有效,但它被认为是对预期行为的回归,而不是错误。.map()回调应该总是返回 DOM 元素而不是 jQuery 对象。

于 2013-03-05T15:57:41.333 回答