2012-03-05 21 views
5

Tengo una aplicación web de una sola página usando jquery y un conjunto de plantillas incrustadas. Una plantilla puede contener la etiqueta, como a continuación:Jquery; seleccionar correctamente los contenidos de una etiqueta de secuencia de comandos

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

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


</script> 

y un código jquery retrive la plantilla es

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

La salida del comando jquery anterior es

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

En lugar de

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

¿Cómo puedo solucionar esto? salida?

+0

Si ve el código en el navegador, se eliminará la etiqueta script de cierre incorporado. –

+0

puede agregar un "" al final tenga en cuenta que esto sucede porque el navegador no admite este tipo de secuencia de comandos –

Respuesta

1

Todo dentro de un <script> se espera que sea la escritura, no HTML.

El navegador ve:

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

y comienza a interpretar todo lo que aparece posteriormente como la escritura, cuando llega al interior de su <script visto como simplemente estar texto.

La excepción a esto es </script> la que el navegador está buscando con el fin de cambiar los contextos desde el guión a HTML, así que cuando se ve la primera </script> en:

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

Se supone que el bloque de script apertura es completa & cambia de nuevo a esperar HTML, establecer correctamente el contenido del nodo guión exterior para:

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

Puede implementar lo que intenta hacer en el servidor y analizar allí, o utilizar un enfoque diferente para la creación de plantillas.

0

Esto se debe a que los navegadores no son compatibles con html/template tipo mime y no saben cómo trabajar con él. Puede solucionarlo solo escapando de la cadena dentro de script-tag.

2

No estoy seguro de que esto lo ayude.

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

alert(a);​ 

enlace violín: http://jsfiddle.net/Sg5W8/

0

¿qué pasa con

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

anidada script etiquetas no están permitidos en HTML, y si se ejecuta un script anidado a través de la validator obtendrá un error de Stray end tag script.

Necesita escaparse de las etiquetas de secuencia de comandos, o usar algo más como elemento de titular para la sintaxis de la plantilla.

0

Sugeriría si es posible mover el script. Intenté 2 opciones. El primero es con codificación html y el segundo es un elemento de script personalizado.

1. html codifican

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 reemplazar

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) 

Cuestiones relacionadas