jQuery:正确选择脚本标签内容

5

我有一个使用jquery和一组嵌入式模板的单页Web应用程序。 模板可能包含以下类似的<script>标签:

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

如何修复这个输出?

如果您在浏览器中查看代码,它将删除嵌入的闭合脚本标签。 - Reza Owliaei
请注意,这是因为浏览器不支持此类型的脚本,您可以在结尾处添加“</script>”。 - Tejasva Dhyani
6个回答

2

我不确定这会对您有所帮助。

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

 alert(a);​

fiddle link: http://jsfiddle.net/Sg5W8/


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');

您可以在服务器上实现您要做的事情并在那里解析,或者使用不同的模板方法。


1

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

您需要转义脚本标签,或使用其他元素作为模板语法的持有者元素。


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>'

0
我建议如果可能的话将脚本移出。我尝试了两个选项。第一个是使用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.脚本替换

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 )


0

这是因为浏览器不支持html/template的mime类型,也不知道如何处理它。你只能通过在script标签内转义字符串来解决它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接