协慌网

登录 贡献 社区

在 HTML 文件中包含另一个 HTML 文件

我有 2 个 HTML 文件,假设a.htmlb.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.htmlviews/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.jshttps://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>

`);