2012-03-05 40 views
5

我有一个使用jQuery和一组嵌入式模板的单页Web应用程序。模板可以包含标签象下面这样:Jquery;正确选择脚本标记的内容

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

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


</script> 

和一个jquery代码以检索所述模板是

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

以上的jquery命令的输出是

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

代替

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

我该如何解决这个问题输出?

+0

如果您查看浏览器的代码,它会删除嵌入的结束脚本标签。 – 2012-03-05 12:15:36

+0

您可以在最后 附加一个“”请注意,这是因为浏览器不支持这种类型的脚本 – 2012-03-05 12:24:00

回答

1

一切一<script>内预计将脚本,而不是HTML。

浏览器看到:

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

,并开始解释随后出现的脚本一切,当它到达内<script其视为只是被文字。

的例外是</script>其浏览器,以便从脚本切换上下文到HTML找,所以当它看到在第一</script>

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

它假定开幕脚本块完成&切换回期待HTML,外脚本节点的内容正确地设定为:

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

您可以实现您试图在服务器上执行的操作并在其中进行解析,或者使用不同的方法进行模板化。

0

这是因为浏览器不支持HTML /模板MIME类型,不知道如何使用它。您只能通过转义script-tag内的字符串来修复它。

2

我不确定这会帮助你。

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

alert(a);​ 

小提琴链接:http://jsfiddle.net/Sg5W8/

0

怎么样

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

嵌套script标记不允许在HTML,并且如果您通过validator运行嵌套脚本,则会出现Stray end tag script错误。

您需要转义脚本标记,或使用别的东西作为模板语法的保留元素。

0

如果可能的话,我会建议将脚本移出。我尝试了2个选项。第一个是使用html编码,第二个是自定义脚本元素。

1. HTML编码

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更换

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)