【问题标题】:include() like function in javascriptinclude() 类似 javascript 中的函数
【发布时间】:2014-04-09 12:10:19
【问题描述】:

目标

我需要一个函数,它可以简单地从另一个文件中获取所有代码并将代码粘贴到调用文件中。

可能的解决方案

一个与 PHP 中的 include() 函数类似的函数。

原因

当我进行托管时,我使用 php 函数 include("filename.html") 在网站上的所有文件中包含页眉和页脚等内容。这让生活变得轻松多了!

现在我没有托管,因为我在另一个站点上工作,而且我正在使用 Github Pages,因此我不能使用 PHP。我只需要使用 HTML、JS 和 jQuery 等。所以,我需要一个简单地从另一个文件中获取所有代码并将代码粘贴到调用文件中的函数。

已经尝试过

  1. load() 在 jQuery 中。

    <pre><script>    
    $(document).ready(function(){
        $("#topbar").load("menubar.html");
    });    
    </script></pre>
    
  2. This question。我尝试了接受的答案,但这对我不起作用。

帮我解决这个问题。

【问题讨论】:

  • 您确定您指的是$("topbar") 而不是$("#topbar")?正如前者表明你有一个&lt;topbar&gt; 元素
  • 对不起。我会立即编辑问题。
  • 在上传文件之前使用预处理器并进行包含。这解决了无法在服务器端执行的问题,以及尝试在客户端执行的所有问题。
  • 嗯,@Quentin 这是一个很好的解决方案。但是,您不认为 JavaScript 或 jQuery 会为此提供一些功能吗?我想动态地做。不是静态的。因为如果我静态地执行它,那么即使是任何文件中的微小更改都需要我一次又一次地运行预处理器。
  • 做客户端是脆弱的,对搜索引擎来说会中断。您正在使用 Github Pages,因此您的数据存储在 git 存储库中。设置提交钩子以在您进行更改时自动运行预处理器。

标签: javascript jquery jquery-load


【解决方案1】:

您应该考虑设置一个构建环境,您可以在其中在发布之前在本地编译您的内容。这样,您可以将代码组织在不同的文件中(例如,在您的情况下,具有始终包含在不同内容文件中的页眉/页脚),在本地编译以使文件自动组合到发布目录中,然后上传.

这样,而不是例如发送 3 次请求的页眉、内容和页脚文件,页眉和页脚被预编译到内容文件中,然后可以通过 1 个请求提供服务。

我个人将Grunt 用作纯静态站点的构建工具,以及连接任务(例如grunt-contrib-concat)。 Grunt 网站上有几个教程,但您可以在此处查看如何为您的特定问题配置任务的示例:

https://stackoverflow.com/a/12749861/351435

【讨论】:

  • 这似乎是一个不错的解决方案。但我还没有尝试过。为此,我将不得不阅读 Grunt。所以,我要去那个!同时,谢谢!一旦我对解决方案感到满意,我将接受答案。
  • 这是最性感的解决方案之一!它不仅能解决我的问题!感谢您的解决方案!
  • 是否有一个 grunt 插件可以帮助我将特定文件插入到特定标记的 div 中? (就像将menubar.html 文件中的代码插入到具有标签topbardiv 中?
【解决方案2】:

我会这样做:

var template = {
    get: function (url, callback) {
        if (this[url]) return callback(null, this[url]);
        var self = this;
        $.ajax({
            "url": url,
            "type": "GET"
        })
        done(function (html) {
            self[url] = html;
            callback(null, html);
        })
        .fail(callback);
    }
}; 

在你只需要这样做之后:

template.get("/menu.html", function (err, html, reason) {
    if (err) return alert('An error is append : '+reason);
    $("#topbar").html(html) // or append
});

【讨论】:

  • 你能详细说明一下吗?
  • 我使用它在我的 Web 应用程序中获取模板。使用此代码,您可以加载任何 html 文件并创建缓存,第一次将加载文件,第二次将在缓存中获取资源。 callback 的第一个参数是错误(如果发生),第二个是结果(就是你的 html 文件的内容)
【解决方案3】:

我假设您的脚本在浏览器中运行。 试试 jQuery 中的 $.getScript 函数。

`$.getMyScript("script.js", function(){

alert("脚本已执行。");

});`

根据您希望解决方案的复杂程度,您还可以查看 http://requirejs.org/ 以合并文件/脚本/模块。

我相信这个问题在How do I include a JavaScript file in another JavaScript file? 上得到了完整的回答。

【讨论】:

  • 我想包含一个 HTML 文件。不是javascript文件。如果您建议我将 html 代码放在 js 文件中,然后使用上述解决方案,我不想这样做。我在互联网上的某个地方读过这个解决方案,但它被严重否决了!非常抱歉!这不是我要找的。​​span>
猜你喜欢
  • 2015-05-15
  • 2019-02-04
  • 1970-01-01
  • 2011-09-02
  • 2012-01-06
  • 1970-01-01
  • 2013-12-11
  • 2011-10-26
  • 2014-03-08
相关资源
最近更新 更多