2010-01-29 20 views
161

Sto usando jQuery.append() per aggiungere alcuni elementi dinamicamente. C'è un modo per ottenere una collezione jQuery o una matrice di questi elementi appena inseriti?jQuery append() - restituisce elementi aggiunti

Allora voglio fare questo:

$("#myDiv").append(newHtml); 
var newElementsAppended = // answer to the question I'm asking 
newElementsAppended.effects("highlight", {}, 2000); 
+3

possibile duplicato di [Modo più semplice per ottenere un oggetto jQuery da un elemento aggiunto] (http://stackoverflow.com/questions/1443233/easier-way-to-get-a-jquery-object-from-appended-element) – bluish

risposta

225

C'è un modo più semplice per fare questo:

$(newHtml).appendTo('#myDiv').effects(...); 

Questo trasforma le cose intorno creando prima newHtml con jQuery(html [, ownerDocument ]), e quindi utilizzando appendTo(target) (nota il bit "To") per aggiungerlo alla fine di #mydiv.

Perché tu ora iniziare con $(newHtml) il risultato finale di appendTo('#myDiv') è che le nuove po 'di html, e la chiamata .effects(...) sarà su quel nuova po' di html troppo.

+3

Penso di usare effettivamente 'appendTo' e' prependTo' molto più di quanto non utilizzi 'append' e' prepend'. –

+2

Utilizzo di jQuery UI versione 1.9.2 Sto ricevendo 'effects' non è una funzione ... ma' effect'is –

+0

funziona in modo impressionante per aggiungere in modo dinamico elementi tramite AJAX e allegare .data() a loro: D –

24
var newElementsAppended = $(newHtml).appendTo("#myDiv"); 
newElementsAppended.effects("highlight", {}, 2000); 
36
// wrap it in jQuery, now it's a collection 
var $elements = $(someHTML); 

// append to the DOM 
$("#myDiv").append($elements); 

// do stuff, using the initial reference 
$elements.effects("highlight", {}, 2000); 
+2

Questo non ha funzionato per me quando in seguito ho provato a associare un evento all'elemento aggiunto. Ho usato var appendedTarget = $ (newHtml) .appendTo (elemento). Potrei quindi legare usando $ (appendedTarget) .bind ('keydown', someFunc) –

+0

Penso che sia '$ elements.effect (" highlight ", {}, 2000);', non 'effects'. – why

+2

Questo non funziona perché la variabile $ elements dopo essere stata aggiunta, cambia e non è più disponibile. –

8

Un piccolo promemoria, quando gli elementi vengono aggiunti dinamicamente, funzioni come append(), appendTo(), prepend() o prependTo() restituiscono un oggetto jQuery, non l'elemento HTML DOM.

DEMO

var container=$("div.container").get(0), 
    htmlA="<div class=children>A</div>", 
    htmlB="<div class=children>B</div>"; 

// jQuery object 
alert($(container).append(htmlA)); // outputs "[object Object]" 

// HTML DOM element 
alert($(container).append(htmlB).get(0)); // outputs "[object HTMLDivElement]" 
+15

L'elemento restituito da append() è il contenitore e non il nuovo elemento. – Tomas

0

Penso che si potrebbe fare qualcosa di simile:

var $child = $("#parentId").append("<div></div>").children("div:last-child"); 

Il #parentId padre viene restituito dal accodamento, in modo da aggiungere una query bambini jQuery ad essa per ottenere l'ultima div figlio inserito.

$ child è quindi il div bambino jquery che è stato aggiunto.

Problemi correlati