我确定我在这里遗漏了一些东西,使用这段代码:
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 }
有人可以解释我为什么吗?这样做的正确方法是什么?
修改
最后,这是所有人都指出的预期行为。事实上,保持匹配集不变是正确的。这就像使用值而不是引用匹配对象集。
答案 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
答案 3 :(得分:1)
因为.add()方法创建一个新集并保留原始集 设置不变: