2012-03-05 11 views
5

Ho un'applicazione web a pagina singola che utilizza jquery e un set di modelli incorporati. Un modello può contenere tag come di seguito:Jquery; selezione corretta del contenuto di un tag script

<script type="html/template" id="sample"> 

<script type="text/javascript" charset="utf-8">alert('x');</script> 


</script> 

e un codice jQuery per retrive il modello è

$("#sample").html(); 

L'output del comando jquery sopra è

<script type="text/javascript" charset="utf-8">alert('x'); 

Invece di

<script type="text/javascript" charset="utf-8">alert('x');</script> 

Come posso risolvere questo produzione ?

+0

Se si visualizza il codice in del browser, rimuoverà il tag script di chiusura incorporato. –

+0

è possibile aggiungere un "" alla fine nota che ciò accade perché il browser non supporta questo tipo di script –

risposta

1

Tutto all'interno di una <script> dovrebbe essere scritto, non HTML.

Il browser vede:

<script type="html/template" id="sample">

e inizia a interpretare tutto ciò che appare in seguito come copione, quando raggiunge l'interno <script il suo visto di testo come solo essere.

L'eccezione a questo è </script> cui il browser sta cercando per passare contesti dallo scritto in HTML, in modo che quando si vede il primo </script> in:

<script type="text/javascript" charset="utf-8">alert('x');</script>

assume il blocco di script di apertura è completo & ritorna in attesa di HTML, impostare correttamente il contenuto del nodo di script esterno per:

<script type="text/javascript" charset="utf-8">alert('x');

È possibile implementare ciò che si tenta di fare sul server e analizzarlo, oppure utilizzare un approccio diverso al modello.

0

Questo perché i browser non supportano il tipo mime di html/template e non sanno come lavorarci. Puoi correggerlo solo eseguendo l'escape della stringa all'interno di script-tag.

2

Non sono sicuro che questo possa esserti d'aiuto.

var a = $("#sample").html() +'</'+'script>'; 

alert(a);​ 

collegamento violino: http://jsfiddle.net/Sg5W8/

0

che dire

var c = $("#sample script").html(); 
var type = $("#sample script").attr("type"); 
var chset = $("#sample script").attr("utf-8"); 

var ouptut = '<script type="'+ type +'" charset="'+ charset +'">' + c + '</script>' 
1

annidata script tag non sono ammessi nel HTML, e se si esegue uno script nidificato attraverso la validator si otterrà un errore di Stray end tag script.

È necessario sfuggire ai tag di script o utilizzare qualcos'altro come elemento di supporto per la sintassi del modello.

0

Suggerirei se possibile spostare lo script. Ho provato 2 opzioni. Il primo è con codifica html e il secondo è un elemento script personalizzato.

1. html codifica

http://jsfiddle.net/Ae48z/

<script type="html/template" id="sample"> 

    &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;alert(&#39;x&#39;); &lt;/script&gt; 

js

var out = $("#sample").html(this); 
    console.log(out); 

2.script sostituire

http://jsfiddle.net/2G7gj/

<script type="html/template" id="sample"> 
    <xscript type="text/javascript" charset="utf-8">alert('x');</xscript> 

</script> 

var out = $('#sample').html().replace(/xscript/g,'script'); 
console.log(out) 

Problemi correlati