I have references to multiple divs and I want to add them all to ONE jQuery object at once.
These things don't work...
>>> $( $e1, $e2, $e3 )
[div]
>>> $([ $e1, $e2, $e3 ])
[[div], [div], [div]]
>>> $().add($e1, $e2, $e3)
[div]
>>> $().add([ $e1, $e2, $e3 ])
[[div], [div], [div]]
However this works:
>>> $().add($e1).add($e2).add($e3)
[div, div, div]
>>> $e1.add($e2).add($e3)
[div, div, div]
But I want more elegant solution.
jQuery does allow you to add a bunch of elements at once to a jquery object, but only when those elements are pure DOM elements, not jquery objects themselves.
var $e1 = $('#x'),
$e2 = $('#y'),
$e3 = $('#z');
var e1 = $e1[0],
e2 = $e2[0],
e3 = $e3[0];
>>> $( [$el, $e2, $e3] ) // does not work
[[div], [div], [div]] // jquery object that contains other jQuery objects
>>> $( [el, e2, e3] ) // works
[div, div, div] // jquery object that contains pure DOM objects
When we pass an array of jquery objects to jQuery()
, they are NOT "unwrapped" before adding them to the result jquery object.
Also remember, however, that passing a single jquery object makes the unwrapping happen.
>>> $( $e1 )
[div] // returns a jquery object
Interestingly, if we mix jquery and pure DOM objects, only the pure objects are operated upon:
>>> $( [$e1, e2, $e3] ).css('background-color', '#000');
Note above that second element is a pure DOM element and the background color is only applied to that second element.
The bottom line is: if you want to add multiple elements to a jquery object at once, add pure DOM object, not jquery objects.
Loop over array using each:
$.each([ $e1, $e2, $e3 ], function(i, $el){
$el.doSomething()
})
DEMO: http://jsfiddle.net/REXmh/
Well you have to make array of these objects and push that into a variable.
var $a = $('<div/>').attr('class','box');
var $b = $('<div/>').attr('class','box');
var $c = $('<div/>').attr('class','box');
var $d = $('<div/>').attr('class','box');
var $arr = [$a, $b, $c, $d];
$.each($arr, function(i, el){
$(el).text('asdf').appendTo('body');
});
plz checkout the fiddle:
http://jsfiddle.net/nvRVG/1/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With