2013-03-05 133 views
3

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/

我做錯了什麼?

回答

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對象。

+0

我同意在錯誤報告中的評估。所有jQuery迭代方法都以這種方式工作。在回調方法內部,'this'是一個DOM節點,而不是一個jQuery對象,返回的值應該是相同的形式。 '$([$(),$(),$()])'也不再適用於過去。 – 2013-03-05 16:12:01

+0

@KevinB我同意 - 但是再次,'$($ some-jQuery-object)'仍然返回一個有效的jQuery對象! – Blazemonger 2013-03-05 17:02:48