在每个循环内向jquery对象添加元素

时间:2013-05-31 09:40:00

标签: jquery

我确定我在这里遗漏了一些东西,使用这段代码:

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

$divs是空对象。

要获得预期的行为,我需要像这样重新生成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

修改

最后,这是所有人都指出的预期行为。事实上,保持匹配集不变是正确的。这就像使用值而不是引用匹配对象集。

4 个答案:

答案 0 :(得分:2)

这实际上是jQuery团队的reported as a bug - 这是来自jQuery团队成员的响应:

  

“这不是错误,这是.add始终有效的方式。.add   改变原始集合,它返回一个新集合。如果要将结果保存到原始变量中,则必须使用   分配 - 例如,coll = coll.add(foo)。“

答案 1 :(得分:1)

来自您提供的文档:

  

给定一个表示一组DOM元素的jQuery对象,   .add()方法从这些对象的并集构造一个新的jQuery对象   元素和传递给方法的元素。

  

以下内容不会保存添加的元素,因为.add()   method创建一个新集并将原始集留在pdiv中   不变:

     

var pdiv = $(“p”);

     

pdiv.add( “DIV”); //错,pdiv不会改变

答案 2 :(得分:1)

add()不会更改原始对象,而是返回一个新对象。

以下是jquery文档中解释它的部分

  

以下内容不会保存添加的元素,因为.add()   method创建一个新集并将原始集留在pdiv中   不变:

     

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

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

答案 3 :(得分:1)

  

因为.add()方法创建一个新集并保留原始集   设置不变:

来自add() jquery's method