2013-07-25 6 views
5

Sto cercando di capire il cambiamento di comportamento di .appendTo() api nella versione jQuery 1.9.1 dalle versioni precedenti. Nella Guida all'aggiornamento dicecambia in .appendTo() in jquery1.9.1

A partire dal 1.9, questi metodi (.appendTo, .insertBefore, .insertAfter, e .replaceAll) restituiscono sempre una nuova serie, che li rende costantemente utilizzabile con concatenamento e il metodo .end(). Prima di 1.9, restituivano il vecchio set solo se c'era un singolo elemento di destinazione. Si noti che questi metodi hanno sempre restituito il set aggregato di tutti gli elementi aggiunto agli elementi di destinazione.

ho provato con un semplice utilizzo di questa API

<div class="test">hello 
</div> 

var $ = jQuery.noConflict(); 
var a =$("<p> hi </p>").appendTo("div.test").attr("style","background-color:red"); 
console.log(a); 

Ecco la fiddle link

sto aggiungendo un elemento di paragrafo in un div e quindi modificando lo sfondo dell'elemento risultante. Ho provato questo con entrambi 1.7.2 e 1.9.1 in entrambi i casi il risultato dopo l'aggiunta è l'elemento di paragrafo.

Ma è stato spiegato nel documento che prima di 1.9 restituisce il vecchio set (nel mio esempio il vecchio set si riferisce all'elemento div credo). Ho sicuramente un'idea sbagliata su questo.

Si prega di aiutare a correggere la mia comprensione.

+1

In 1.9.1 si restituisce: [p, prevObject: jQuery.fn.jQuery.init [1], il contesto: non definito, jquery: "1.9.1", costruttore: la funzione, init: la funzione ...] In 1.7.2: [p, costruttore: function, init: function, selector: "", jquery: "1.7.2 ", dimensione: funzione ...] Confrontali e analizzali più da vicino.Anche nota che sono in effetti un po 'diversi l'uno dall'altro e afferma anche che sono più coerenti, nel senso che non erano del tutto coerenti in anticipo – Lemonade

+1

Prova a usare 'end()': '$ ("

hi

") .appendTo (" div.test "). End(). Attr (" style "," background-color: red ")'. – meze

+0

no problema, usare 'var a = $ (" div.test "). append ("

hi

");' – vladkras

risposta

1

"questi metodi hanno sempre restituito il set aggregato di tutti gli elementi aggiunti" significa che restituisce la raccolta jQuery su cui è stato chiamato appendTo() - non il set passato alla funzione.

Questo sarebbe il paragrafo, nel tuo caso. Quindi dovrebbe tornare a prescindere dalla versione di jQuery che si sta utilizzando fino a quando "div.test" è un target a elemento singolo (e, a proposito, non intendi lo $('div.test')?), O se si usa v 1.9, come finché "div.test" restituisce almeno un elemento.

Questo è il caso del concatenamento jQuery con la maggior parte delle chiamate - che la funzione restituisce l'elemento su cui è stato chiamato in modo da poter continuare a fare altre cose con esso. Credo che questo sia il caso di all del sottoinsieme manipulation delle funzioni jQuery.

+0

Grazie per la spiegazione. – SpreeTheGr8

0

Hanno restituito gli elementi associati a un singolo elemento di destinazione. Anche se l'elemento di destinazione non è stato trovato.

La nuova versione restituisce l'intero set, indipendentemente dal numero di elementi di destinazione. Se l'elemento obiettivo non è stato trovato, non restituirà più nulla.

In tal modo, restituiscono la struttura creata anziché i dati aggiunti.