0

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

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

$divs是空对象。

为了获得预期的行为,我需要$divs像这样重新影响 var:

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 的方法

编辑

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

4

4 回答 4

2

这实际上是作为错误报告给 jQuery 团队的——这是 jQuery 团队成员的回复:

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

于 2013-05-31T09:45:24.887 回答
1

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

这是 jquery docs 中解释它的部分

以下将不会保存添加的元素,因为 .add() 方法会创建一个新集合,并保持 pdiv 中的原始集合不变:

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

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

于 2013-05-31T09:46:03.597 回答
1

因为 .add() 方法创建了一个新集合并保持原始集合不变:

来自add() jquery的方法

于 2013-05-31T09:46:14.257 回答
1

来自文档(您提供的):

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

以下将不会保存添加的元素,因为 .add() 方法会创建一个新集合,并保持 pdiv 中的原始集合不变:

var pdiv = $("p");

pdiv.add("div"); // 错误,pdiv 不会改变

于 2013-05-31T09:44:51.343 回答