我有一个使用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>
如何修复此输出?
答案 0 :(得分:2)
我不确定这会对你有所帮助。
var a = $("#sample").html() +'</'+'script>';
alert(a);
答案 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编码
<script type="html/template" id="sample">
<script type="text/javascript" charset="utf-8">alert('x'); </script>
JS
var out = $("#sample").html(this);
console.log(out);
2.script replace
<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 )