loadしたhtmlにjsを適用させる

loadしたhtmlにjsを適用させる:


loadしたhtmlにjsを適用させる


前提:フォルダ階層

階層
┣ static 
┃ ┣ css 
┃ ┃ ┗ menu.css 
┃ ┣ js 
┃ ┃ ┣common.js 
┃ ┃ ┗menu.js 
┃ ┣ html 
┃ ┃ ┗ menu.html 
┗ templates 
  ┗ main.html 
 


やりたかったこと


機能

現在いるページと対応するメニューの色を変更させたい。


コード

htmlで複数ページを作る時に、メニューのところのhtmlが長いのでmenu.htmlとして外部ファイルを作った。

それをcommon.jsで読み込み、main.htmlにmenu.htmlを適用させた。

更に今いるページと対応するメニューの色を変更するために

特定のタグをactiveにする処理を書いたmenu.jsをmenu.htmlに適応させたい。

main.html
<body> 
    <div id="menu"></div> 
 
    <!--jQueryの読み込みとか--> 
    <script type="text/javascript" 
        src="/webjars/jquery/3.3.1/jquery.min.js" charset="utf-8">   
    </script> 
    <!--javaScriptの読み込み--> 
    <script type="text/javascript" src="/js/common.js"></script> 
    <script type="text/javascript" src="/js/menu.js"></script> 
</body> 
menu.html
<ul id="nav">  
   <li><a href="/menu1">MENU1</a></li>  
   <li><a href="/menu2">MENU2</a></li>  
   <li><a href="/menu3">MENU3</a></li>  
   <li><a href="/menu4">MENU4</a></li>  
 </ul>  
common.js
$(window).on('load', function() { 
      //main.htmlのmenu要素についてmenu.htmlを適用させる 
    $("#menu").load('/html/menu.html'); 
}); 
menu.js
//現在のページのurlとメニューのurlが同じだったら、そこのタグをactiveにする 
$(function() { 
    $('#nav li a').each(function() { 
        var $href = $(this).attr('href'); 
        if (location.href.match($href)) { 
            $(this).addClass('active'); 
        } else { 
            $(this).removeClass('active'); 
        } 
    }); 
}); 
menu.css
/*activeになってる要素navの[li a]タグの文字を赤にする*/ 
#nav li a.active { 
    color: red; 
} 


問題1

menu.jsはちゃんと読み込まれているっぽいけど、activeにならない。

コンソール上のエラーは発生してないが、なんかうまく適用されていない気がする


実際にやってみたこと

menu.html上で直接jsを呼んでみる

menu.html
<!--変更したところ↓--> 
<script type="text/javascript" src="/js/menu.js"></script> 
<!--変更したところ↑--> 
<ul id="nav">  
   <li><a href="/menu1">MENU1</a></li>  
   <li><a href="/menu2">MENU2</a></li>  
   <li><a href="/menu3">MENU3</a></li>  
   <li><a href="/menu4">MENU4</a></li>  
 </ul>  


問題2

とりあえず、jsは読み込まれて適用された。が、

コンソールに以下のエラー

error
[[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/. 
よくわらかないけどエラーが出るってことはダメな気がする。気持ち悪いし

あと、ググったらエンドユーザーに影響がどうのって書いてたらかダメなんだと思う


解決方法

menu.htmlをロードする時に一緒にjsもロードしてあげる!

common.js
$(window).on('load', function() { 
      //main.htmlのmenu要素についてmenu.htmlを適用させる 
    $("#menu").load('/html/menu.html'); 
    //変更したところ↓ 
    $.getScript("/js/menu.js", function() { 
    }); 
    //変更したところ↑ 
}); 
これでエラーなくちゃんとactiveにすることができた


参考にしたサイト

http://mugen00.moo.jp/web/jquery/getscript-2

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)