2012-12-16 14 views
10

Ho riferimenti a più div e voglio aggiungerli tutti a UN oggetto jQuery in una volta.Aggiunta di più elementi jQuery/DOM a un singolo oggetto jQuery

Queste cose non funzionano ...

>>> $($e1, $e2, $e3) 
[div] 

>>> $([ $e1, $e2, $e3 ]) 
[[div], [div], [div]] 

>>> $().add($e1, $e2, $e3) 
[div] 

>>> $().add([ $e1, $e2, $e3 ]) 
[[div], [div], [div]] 

Tuttavia questo funziona:

>>> $().add($e1).add($e2).add($e3) 
[div, div, div] 

>>> $e1.add($e2).add($e3) 
[div, div, div] 

Ma io voglio soluzione più elegante.

+0

cosa sono $ el1 $ el2 e $ el3? Elementi Dom precedentemente scelti da jQuery? –

+1

Perché non li si inserisce in un array? –

+0

E come faccio a creare un oggetto jQuery da quell'array (elegantemente) – treecoder

risposta

11

jQuery non consente di aggiungere un po 'di elementi in una sola volta a un oggetto jQuery, ma solo quando tali elementi sono puri elementi DOM, non oggetti jQuery stessi.

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 

Quando si passa un array di oggetti jQuery jQuery(), non sono "aperto" prima di aggiungerli all'oggetto risultato jquery.

Ricordare inoltre che il passaggio di un singolo oggetto jquery consente lo svolgimento della procedura.

>>> $($e1) 
[div]      // returns a jquery object 

È interessante notare che, se mescoliamo jquery e oggetti DOM puri, solo gli oggetti puri sono operati:

>>> $([$e1, e2, $e3]).css('background-color', '#000'); 

Nota sopra di tale secondo elemento è un elemento DOM puro e il colore di sfondo viene applicato solo a quel secondo elemento.

La riga di fondo è: se si desidera aggiungere più elementi a un oggetto jquery in una sola volta, aggiungere oggetti DOM puri, non oggetti jQuery.

+0

Ottima risposta, mi ha aiutato anche; Grazie! :) –

+0

jquery mi ha fallito qui –

1

bene bisogna fare array di questi oggetti e spingere che in una variabile.

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 cassa del violino:

http://jsfiddle.net/nvRVG/1/

+0

quindi cosa vuoi aggiungere lo stesso testo in ogni div – Jai

+0

aggiornato la risposta. È quello che vuoi – Jai

Problemi correlati