2012-06-27 9 views
5

Sto cercando di avvolgere una serie generato di elementi che vengono creati al volo con un altro elemento, ad esempio:jQuery wrapAll non comportarsi come previsto

var innerHtmlAsText = "<li>test1</li><li>test2</li>"; 
var wrapper = "<ul />"; 

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper)); 

mio risultato atteso è

<ul> 
    <li>test1</li> 
    <li>test2</li> 
</ul> 

ma il risultato effettivo è:

<li>test1</li> 
<li>test2</li> 

Gli li elementi non sono avvolti. Nella mia istanza, innerHtml viene generato al volo da un modello generato dall'utente e il wrapper viene fornito separatamente. Come posso ottenere i valori interiori avvolti?

+1

'$ (involucro) .Append (innerHtmlAsText) .appendTo ('div # target');' farebbero lo stesso, senza il jQuery nidificato chiama. – Yoshi

risposta

8

wrapAll restituisce l'oggetto jQuery originale, non quello nuovo. Quindi, wrapAll restituisce il valore <li> s, perché quello è l'oggetto che è stato chiamato wrapAll.

Prova questo:

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper).parent()); 
+0

Stavo solo scrivendo qualcosa del genere ... – elclanrs

+1

@elclanrs: Le grandi menti pensano allo stesso modo :-) –

2

Ciò avviene perché wrapAll non restituisce l'involucro, ma l'oggetto originale è stato applicato a (come maggior parte delle funzioni jquery).

Utilizzare il .parent() per raggiungere l'elemento ul ..

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper).parent()); 
1

E 'anche possibile solo con .append().

var innerHtmlAsText = "<li>test1</li><li>test2</li>"; 
var wrapper = "<ul/>"; 

$("div#target").append($(wrapper).append(innerHtmlAsText)); 

DEMO

+0

@ilivewithian Penso che si possa fare solo con '.append' – thecodeparadox

+0

+1 questo è l'approccio migliore che penso. – defau1t

Problemi correlati