2012-06-27 32 views
2

我想用jQuery创建一些DOM节点,将它们附加到html,同时保持它们被选中,所以我不需要再选择它们。jQuery:如何创建一个新元素并将其添加到集合?

这是我的代码:

var foo=$(''); 
for(var i=0;i<10;i++){ 
    var bar=$('<div>'); 
    $('body').append(bar); 
    foo.add(bar); 
} 

显然foo将在年底保持为空的,所以它不是要去工作。我应该如何处理它,而不是最终选择所有的酒吧?

回答

2

这个问题的原因是.add()方法不改变原来的jQuery集合对象,但返回一个新的。

你可以你的代码只需更改为:The DEMO.

var foo=$(''); 
for(var i=0;i<10;i++){ 
    var bar=$('<div>'); 
    $('body').append(bar); 
    foo = foo.add(bar); 
} 

console.log(foo); 
+0

我也在打破我的想法:)但解决方案非常简单! – VisioN

+0

谢谢你,还有@VisioN,我会认为这是接受的,因为它是一个更原生的jQuery解决方案,并且你之前回答了:) –

3

您可以使用数组,而不是一个jQuery对象:

var foo = []; 
for(var i=0; i < 10; i++) { 
    var bar = $('<div>'); 
    $('body').append(bar); 
    foo.push(bar[0]); 
} 
foo = $(foo); 
+0

我想补充'富= $(富);而'for'循环之后'让' foo'现在指向一个包含元素的jQuery对象,或者创建一个包含带有元素的jQuery对象的新变量。 –

+0

@AnthonyGrist它不像jQuery集合一样工作,例如之后你不能使用'foo.css({'foo':'bar'})''。 –

+1

@XunYang看看[这个jsFiddle](http://jsfiddle.net/UaA7z/)。你需要用'foo.push(bar [0])'修改'foo.push(bar);'行,以便将实际的DOM元素存储在数组中,而不是包含jQuery对象DOM元素。 –

1

要添加新的元素,jQuery的收集使用foo = foo.add(bar)

这里是你的代码的更新版本:

var foo = $(); 
for (var i = 0; i < 10; i++) { 
    var bar = $("<div />").appendTo("body"); 
    foo = foo.add(bar); 
} 
foo.css("color", "red"); 

DEMO:http://jsfiddle.net/u3efP/

相关问题