背景
所有 JS 模板引擎都建议将模板文本放入脚本块中,如下所示:
<script id="peopleTemplate" type="text/template">
{#people}
<div class="person">Name: {firstName} {lastName}</div>
{/people}
</script>
但许多开发人员(可以理解)不喜欢这样做,因为他们在脚本块内的代码编辑器中失去了 HTML 语法突出显示。我见过这样的解决方法:在 “text/html”模板中保持正确的 HTML 语法突出显示 https://stackoverflow.com/questions/14449312/keep-correct-html-syntax-highlighting-in-script-text-html-templates。这个问题并不是询问解决方法。
我知道一个危险是 Web 浏览器会尝试修复无效的 HTML,因此调用 $('#peopleTemplate').html() 将产生不可预测的结果。然而,我一时想不出任何例子来说明这一点。
Question
用 div 替换 script 标签还有哪些其他危险?
奖励:有人能想出一个很好的小提琴来说明浏览器 HTML 自动修复吗?
以下是浏览器自动修复问题的示例:http://jsfiddle.net/KPasF/ http://jsfiddle.net/KPasF/
模板是:
<table>
<tr>
{{#numbers}} <th> {{.}} </th> {{/numbers}}
</tr>
</table>
数据是:
var json = { "numbers": [ 1, 2, 3 ] };
看小提琴http://jsfiddle.net/KPasF/ http://jsfiddle.net/KPasF/当模板位于隐藏的 div 中,然后再次位于脚本块中时,会产生不同的结果。
解释
当你把它放在隐藏的<div>
,浏览器会剥离掉外面的内容<th>
标签({{#numbers}}
and {{#numbers}}
小胡子标签)。这只剩下{{.}}
,它将绑定到 json 对象并呈现为[object Object]
将模板放入<script type='text/html'>
块按您的预期工作,我们得到三个<th>
's
浏览器如何破坏位于模板内的模板的示例<div>
代替<script>
:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)