2013-05-31 94 views
0

我敢肯定,我失去了一些東西在這裏,使用此代碼裏面:元素添加到jQuery對象每個循環

var $divs = $(); 
$.each([1, 2, 3], function (i, val) { 
    $divs.add($('<div>' + val + '</div>')); 
}); 
alert($divs.length); //output 0 { not really expected } 

$divs是空的對象。

要獲得預期的行爲,我需要reaffect爲VAR $divs這樣的:

var $divs = $(); 
$.each([1, 2, 3], function (i, val) { 
    $divs = $divs.add($('<div>' + val + '</div>')); 
}); 
alert($divs.length); //output 3 { as expected } 

有人能解釋我爲什麼?這樣做的正確方法是什麼?

jsFiddle

add() jquery's method

編輯

最後,這是預期的行爲,因爲所有的你指出它。事實上,保持匹配集合不變是正確的。這就像使用值而不是引用一組匹配對象。

+0

http://bugs.jquery.com/ticket/9055 – lifetimes

+0

好吧,看起來像預期的行爲,真的很奇怪IMO:「這不是一個錯誤,這是.add一直工作的方式。 .add不*改變原始集合,它返回一個新的集合。如果你想將結果保存到原始變量中,你必須使用一個任務。「 –

+0

好吧,夥計們,應該仔細閱讀文檔,對不起! –

回答

1

從文檔(您提供):

如果提供的jQuery代表了一組DOM元件,所述 。新增()方法從這些 元件的結合構造新jQuery對象和通過該方法的人。

而且

以下將不保存添加的元素,因爲。新增() 方法創建一個新組並保持原始集PDIV 不變:

VAR PDIV = $(「p」);

pdiv.add(「div」); // WRONG,PDIV不會改變

2

這竟是reported as a bug到jQuery團隊 - 這是從一個jQuery團隊成員的響應:

「這是不是一個錯誤,它的方式.add一直工作.add確實 不是突變原始集合,它會返回一個新集合。如果要將結果保存到原始變量中,必須使用 賦值 - 例如,coll = coll.add(foo)

1

的add()不改變原來的對象,而是返回一個新的對象。

下面是部分從jQuery文檔,解釋它

以下將不保存添加的元素,因爲。加() 方法創建一個新組並保持原始集PDIV 不變:

var pdiv = $("p"); pdiv.add("div"); // WRONG, pdiv will not change

http://api.jquery.com/add/#add-elements