jquery html () rimuove i tag di script

Devo sostituire il contenuto di un div nella mia pagina con l’html risultante da una chiamata ajax. Il problema è che l’html contiene alcuni script necessari e sembra che la funzione jquery html () li stacchi, devo filtrare la risposta e ottenere solo un div specifico.

Sto pensando a una soluzione alternativa che è quella di estrarre tutti i tag di script dalla risposta ajax e quindi aggiungerli fanno il DOM ma ho problemi a farlo.

Ecco il mio codice;

$('a.link-vote').live('click',function(){ var idfeedback = $(this).attr('id').split('-')[1]; var href = $(this).attr('href'); $('.feedback-' + idfeedback + '-loader').show(); $.ajax({ type: "POST", url: href, success: function(response){ var x = $(response).find('#feedback-'+ idfeedback).html(); $('.feedback-' + idfeedback + '-loader').hide(); $('#feedback-'+ idfeedback).html(x); } }); return false; }); 

Ho trovato questo vecchio argomento: jQuery – i tag di script nell’HTML sono analizzati da jQuery e non eseguiti

ma è una conclusione qualsiasi. Ho provato le soluzioni suggerite lì ma nessuno di loro funziona.

EDIT: mi sembra di aver trovato una soluzione basata su quel vecchio argomento ma non è carina;

  var dom = $(response); // var x = $(response).find('#feedback-'+ idfeedback).html(); $('.feedback-' + idfeedback + '-loader').hide(); //$('#feedback-'+ idfeedback).html(x); $('#feedback-'+ idfeedback).html(dom.find('#feedback-'+ idfeedback).html()); dom.filter('script').each(function(){ var obj = $(this); $('#feedback-'+ idfeedback + ' .feedback-comments').append(obj); }); 

Ci deve essere un modo semplice.

Edit: Sono stanco e non penso. Puoi semplicemente usare il metodo nativo innerHTML invece di .html() :

 $('#feedback-' + idfeedback)[0].innerHTML = x; 

Risposta originale:

La mia impressione è che la risposta che hai collegato non funzioni per te perché gli script inclusi sono chiamati con un attributo src invece del contenuto di script tra i e . Questo potrebbe funzionare:

 $.ajax({ url: 'example.html', type: 'GET', success: function(data) { var dom = $(data); dom.filter('script').each(function(){ if(this.src) { var script = document.createElement('script'), i, attrName, attrValue, attrs = this.attributes; for(i = 0; i < attrs.length; i++) { attrName = attrs[i].name; attrValue = attrs[i].value; script[attrName] = attrValue; } document.body.appendChild(script); } else { $.globalEval(this.text || this.textContent || this.innerHTML || ''); } }); $('#mydiv').html(dom.find('#something').html()); } }); 

Nota, questo non è stato testato per nulla e può mangiare bambini.

Ho avuto lo stesso problema, ma con più problemi che non ho potuto risolvere facilmente. Ma ho trovato una soluzione:

Questa è la mia pseudo-fonte (HTML) che non ho potuto modificare in alcun modo.

   

Ho usato $.get() per recuperare questa pagina HTML. Ora che ho il codice come stringa, è il momento di cercare in esso con jQuery. Il mio objective era, per isolare il codice Javascript all’interno dello -Tag, che appartiene all'identificatore DIV2, ma non identifier1 . Quindi quello che volevo ottenere è bar(456) come stringa di risultato. A causa della ragione, che jQuery rimuove tutti i tag script, non puoi più cercare in questo modo:

 var dom = $(data); //data is the $.get() - Response as a string var js = dom.filter('div#identifier2 script').html(); 

La soluzione è una soluzione semplice. All'inizio sostituiremo tutti gli -Tag con qualcosa come :

 var code = data.replace(/( 

È un semplice trucco, ma funziona!

Provare

 $('#feedback-'+ idfeedback).empty().append(response); 

Non ho provato Non sono sicuro che .html() davvero ma provi.

Puoi mostrarmi la struttura html dei risultati?

AGGIORNAMENTO 2010/11/03

Puoi eliminare il tag dal risultato .html() con l'espressione regolare.
Dal tuo primo codice, dopo questa linea.

 var x = $(response).find('#feedback-'+ idfeedback).html(); 

Puoi fare qualcosa di simile.

 x = x.replace(/\n/g, '{n}') .replace(/