我有 2 个 HTML 文件,假设a.html
和b.html
。在a.html
我想包含b.html
。
在 JSF 中,我可以这样做:
<ui:include src="b.xhtml" />
这意味着在a.xhtml
文件中,我可以包含b.xhtml
。
我们如何在*.html
文件中执行此操作?
我认为最好的解决方案是使用 jQuery:
a.html
:
<html>
<head>
<script src="jquery.js"></script>
<script>
$(function(){
$("#includedContent").load("b.html");
});
</script>
</head>
<body>
<div id="includedContent"></div>
</body>
</html>
b.html
:
<p>This is my include file</p>
此方法是解决我的问题的简单干净的方法。
jQuery .load()
文档在这里。
从上面扩展 lolo 的答案,如果您必须包含很多文件,则这里的自动化程度更高。使用此 JS 代码:
$(function () {
var includes = $('[data-include]')
$.each(includes, function () {
var file = 'views/' + $(this).data('include') + '.html'
$(this).load(file)
})
})
然后在 html 中包含一些内容:
<div data-include="header"></div>
<div data-include="footer"></div>
其中包括文件views/header.html
和views/footer.html
。
我的解决方案类似于上面的 lolo 之一。但是,我通过 JavaScript 的 document.write 插入了 HTML 代码,而不是使用 jQuery:
a.html:
<html>
<body>
<h1>Put your HTML content before insertion of b.js.</h1>
...
<script src="b.js"></script>
...
<p>And whatever content you want afterwards.</p>
</body>
</html>
b.js:
document.write('\
\
<h1>Add your HTML code here</h1>\
\
<p>Notice however, that you have to escape LF's with a '\', just like\
demonstrated in this code listing.\
</p>\
\
');
我反对使用 jQuery 的原因是 jQuery.js 的大小约为 90kb,我希望将要加载的数据量保持尽可能小。
为了无需大量工作即可获取正确转义的 JavaScript 文件,可以使用以下 sed 命令:
sed 's/\\/\\\\/g;s/^.*$/&\\/g;s/'\''/\\'\''/g' b.html > escapedB.html
或仅使用以下在 Github 上以 Gist 形式发布的便捷 bash 脚本,即可自动执行所有必要工作,将b.html
转换为b.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6
归功于 Greg Minshall改进的 sed 命令,该命令还转义了反斜杠和单引号,这是我最初的 sed 命令未考虑的。
另外,对于支持模板文字的浏览器,以下方法也适用:
b.js:
document.write(`
<h1>Add your HTML code here</h1>
<p>Notice, you do not have to escape LF's with a '\',
like demonstrated in the above code listing.
</p>
`);