2015-04-02 24 views
9

Sto facendo funzionare il seguente JavaScript sia Firefox Developer Edition 38 e Internet Explorer 8 e 9.

console.log('+++++++++++++++++++++++++++++++'); 
console.log('jquery version = ' + $.fn.jquery); 
var myHtmlString = "<!-- my comment -->" + 
         "<optgroup label='my label'>" + 
         "<option value='1'>option one</option>" + 
         "</optgroup>"; 

console.log($(myHtmlString)); 
console.log($(myHtmlString)[0]); 
console.log($(myHtmlString)[1]); 
console.log($(myHtmlString).length); 

In Firefox, ottengo:

enter image description here

In IE, ottengo:

enter image description here

Quindi, a quanto pare in Firefox, un commento HTML i s viene aggiunto come elemento di questo oggetto ma in IE, non lo è. Perché questo si comporta in questo modo, c'è un bug o c'è un altro modo in cui dovrei creare questo oggetto?

NOTA: Ho provato $.parseHTML(myHtmlString) ma fa la stessa cosa.

AGGIORNAMENTO: Questa risposta How does jQuery treat comment elements? fornisce una soluzione alternativa.

+0

Che cosa è '[oggetto oggetto]' nel registro IE? Sei sicuro che non sia il tuo commento. –

+0

@JonathanWood Guarda l'output differente di '$ (myHtmlString) .length' – ceejayoz

+3

Non riesco a trovare un riferimento, ma i commenti creati in javascript non sono supportati in IE se non ricordo male, a meno che non vengano creati con' documento. createComment', e non credo che jQuery usi quello – adeneo

risposta

19

Quindi dipende dal browser che si sta utilizzando, ma dal momento che si sta passando in più di 1 piega semplice, (ad esempio $('<div>example html creation</div>')) jQuery permette al navigatore gestire la creazione.

Se l'HTML è più complesso di un singolo tag senza attributi, in quanto è nell'esempio di cui sopra, la creazione effettiva degli elementi è gestita dal meccanismo di .innerHTML del browser. Nella maggior parte dei casi, jQuery crea un nuovo elemento e imposta la proprietà innerHTML dell'elemento al frammento di codice HTML che è stato passato in.

jQuery documentation

Firefox per esempio sta cercando attraverso ciascuno dei vostri < > aree , e trova 2. Mentre a IE non interessa, e lo elabora tutto come 1 (da cui la lunghezza 1).

Breve storia, lo stai facendo bene. È solo internamente come lo gestisce il browser, non devi preoccuparti di nulla!

+0

Se vuole un nodo di commento, allora non va bene. Il fatto che i browser gestiscano diversamente * è * il problema. Per non parlare del fatto che viene restituito il nodo Elemento errato. –

+0

@mcpDESIGNS hai ragione: '$ (". Mia-classe "). Html (" ") .html()' restituisce '" "' in IE e '" in chrome/firefox – kleaver

+2

Non sono sicuro quello che sto fraintendendo sulla domanda ... ma questo sembra come se fosse la domanda –

Problemi correlati