1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JQueryで複数のhtmlをincludeする。includeしたhtmlの要素に対してJSも使えるようにする。

Last updated at Posted at 2019-03-13

いまさらJQuery再び

前回の記事では一つのhtmlファイルを読み込んでたんですが、複数のhtmlファイルを読み込もうと思います。さらに各htmlが読み込み終わってから、展開された要素に対してJS使ったりしたい。

作った関数の使い方

第一引数にはJSONの配列、第二引数には読み込んだ外部JSから使いたい関数を渡します。
第一引数の配列の各要素のJSONのキーにはfilepath,selectorがあり、それぞれ読み込むHTMLファイルのパスと展開先のセレクタを値として設定します。
第二引数は特に使いたいJSがなければなくても大丈夫です。

// includeHTML(JSONの配列,function(){読み込んだ外部JSから使いたい関数たち})
includeHTML(
  [
    { filepath: "/include/footer.html", selector: "div.footer_inc"},
    { filepath: "/include/header.html", selector: "div.header_inc" }
  ],
  function() {
    // ここから使いたい関数
    $(function() {
      hoge.ready();
      huga.ready();
    });
  }
);

作った関数

includeHTML
function includeHTML(requestArrayOfJson, usingFuncFromMainjs = function(){;}) {
  var jqXHRList = [];
  // ajaxの処理のリスト作成
  for (var i = 0; i < requestArrayOfJson.length; i++) {
    jqXHRList.push(
      $.ajax({
        url: requestArrayOfJson[i].filepath,
        cash: false,
        dataType: "html"
      })
    );
  }
  // jqXHRList内のajaxの処理が全て終了したらthen内の処理に移る
  $.when
    .apply($, jqXHRList)
    .then(
      function() {
        var htmlList = [];
        // ajaxで取得したhtmlのリスト作成
        for (var i = 0; i < arguments.length; i++) {
          var result = arguments[i];
          htmlList.push(result[0]);
        }
        return htmlList;
      },
      function(){
        console.log("Fail to GET HTML by ajax");
      }
    )
    .then(
      function(htmlList) {
        // 各htmlのinclude処理
        for (var i = 0; i < requestArrayOfJson.length; i++) {
          $(requestArrayOfJson[i].selector).html(htmlList[i]);
        }
      },
      function(){
          console.log("Fail to write HTML");
      }
    )
    .then(
      function() {
        // JSのファイルを読み込んだ後、コールバックでこの関数の第二引数として渡した関数実行。
        $.getScript("読み込みたい外部JSのパス", usingFuncFromMainjs);
      },
      function(){
        console.log("Fail to get 読み込みたい外部JS");
      }
    );
}

感想

できたけど、なんかやってることの方向性がおかしい気もする。

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?