Javascript 最佳实践和约定,如 John Resig 和《可维护的 JavaScript》一书的作者 Nicholas Zachas 所强调的,建议使用 HTML 注释或具有自定义类型的脚本标签来存储 HTML 模板。
评论示例:
<div id="myTemplate">
<!-- <ul><li>$item</li></ul> -->
</div>
<script>
var myTemplate = document.getElementById('myTemplate').childNodes[0].data;
var myHtml = myTemplate.replace(/\$item/g, itemValue);
</script>
脚本标签示例:
<script id="myTemplate" type="text/x-html-template">
<ul><li>$item</li></ul>
</script>
<script>
var myTemplate = document.getElementById('myTemplate').innerHTML;
var myHtml = myTemplate.replace(/\$item/g, itemValue);
</script>
我非常不喜欢基于评论的模板,因为评论应该只是那些——评论,旨在被正常运行的应用程序忽略——因此我对它是如何被 JS 建议感到有些困惑大师。
脚本标签模板更有意义,我通常称它为最好的实践,如果不是很好的实践,因为目的和初始的非功能都被很好地描述了。我唯一的问题是,在一些现代编辑器中,颜色突出显示、自动完成、自动标记验证等在脚本标签中工作时都会丢失。
我过去采用的一种模板方法是将所有内容放在容器 div 中,然后将容器 div 分类为 class="template",然后在 CSS 中将其标记为“.template { display: none; }”。
<div id="myTemplate" class="template">
<ul><li>$item</li></ul>
</div>
<script>
var myTemplate = document.getElementById('myTemplate').innerHTML;
var myHtml = myTemplate.replace(/\$item/g, itemValue);
</script>
这对我来说效果很好,虽然 DOM 解析器和渲染器显然不必要地预先处理数据,但我不确定这是否真的是一个大问题,只要模板结构不破坏 HTML有效性规则。
那么,我的问题是,我错过了什么?不鼓励使用第三种存储模板标记的方法(即,将其作为 display:none 放在 DOM 中)的唯一原因是因为 DOM 解析器和渲染器无论如何都会处理它?或者还有其他原因,也许是技术原因,我还没有遇到过?我想知道,因为我想再次利用我的编辑器的能力来帮助我微调适当的 HTML 模板。