将新创建的DOM元素添加到空的jQuery对象中

6
为什么在jQuery 1.4.2中无法正常运行?

var $list = $([]);
for(var i=0; i<50; i++) {
    $list.add( $('<div/>', { id: 'jake', class: 'test' }).data('test', { hi: 'hello' }) );
}
alert($list.size()); // 0

谢谢!


在这里给出正确的解释:jQuery如何向空选择器添加元素? - mohanrajt
2个回答

11

再次指向引用列表对我行得通;例如:$list = $list.add( $('<div/>') );

var $list = $([]);
for(var i=0; i<50; i++) {
    $list=$list.add( $('<div/>', { 'id': 'jake'+i, 'class': 'test' }).data('test', { hi: 'hello' }) );
}
alert($list.size()); // 50

点赞为解决我的问题,但我希望有一种更好的方法(即:.append())将项目添加到空集合中。Shog9对类似问题的回答解释了为什么没有这样的方法。 - Michael

4

为什么add不起作用我不知道,但是由于jQuery是类似数组的对象,你可以用push替换它,这样应该可以实现你想要的功能。


太棒了,我以为我也试过了,但显然没有!谢谢。 - taber
看起来要在 $list 上使用 .clone(true),$list 数组需要是一个 DOM 节点(例如:$('<div />')),但我不想要一个包含 div,我只想要一个没有父节点的 DOM 节点列表(就像一个数组!)这可能吗? - taber
如果我必须要有一个包含的 div,那也不是世界末日。这只是 DOM 中的额外垃圾。哦,好吧。 - taber
在您的情况下,因为每个div在被推入$list之前都是单独创建的,所以$list中的每个元素实际上都是自己独立的jQuery对象,因此您需要调用clone的是这些对象:clones = $list.map(function () { return this.clone(true); }); 然后您就可以继续了。 - x1a4
不需要包含 div :) - x1a4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接