jQuery的;正确选择脚本标签的内容

时间:2012-03-05 11:55:12

标签: jquery

我有一个使用jquery和一组嵌入式模板的单页Web应用程序。模板可能包含如下标记:

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

如何修复此输出?

6 个答案:

答案 0 :(得分:2)

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

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

 alert(a);​

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

答案 1 :(得分:1)

<script>内的所有内容都应该是脚本,而不是HTML。

浏览器看到:

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

并开始解释随后显示为脚本的所有内容,当它到达内部<script时,它被视为文本。

此例外是</script>浏览器正在查找以便将上下文从脚本切换到HTML,因此当它看到第一个</script>时:

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

假设开放脚本块已完成&amp;切换回期望HTML,正确地将外部脚本节点的内容设置为:

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

您可以实现在服务器上尝试执行的操作并在其中进行解析,也可以使用其他方法进行模板化。

答案 2 :(得分:1)

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

您需要转义脚本标记,或使用其他内容作为模板语法的holder元素。

答案 3 :(得分:0)

那是因为浏览器不支持html / template mime-type,也不知道如何使用它。您只能通过在script-tag中转义字符串来修复它。

答案 4 :(得分: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>'

答案 5 :(得分: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 replace

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 )