通常、Javascriptの関数等をまとめた外部Javascriptファイル(JSファイル と略します)を、HTML内の head 内で指定しますが、 別の外部JSファイルに入れ替えたい場合もあります。
そこで今回は、この外部JSファイルを別のファイルに変更する方法について説明します。
■外部JSファイルを使うHTMLファイル
外部JSファイル test-script-chg1.js がこのHTMLファイルと同じディレクトリに存在することにします。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test jQuery</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="test-script-chg1.js"></script> </head> <body> <p>メッセージあああ</p> <div> <p class="msgchg1">メッセージ1</p> <p class="msgchg2">メッセージ2</p> <p class="msgchg3">メッセージ3</p> </div> <p class="msgchg4">メッセージ6</p> <button class="btn1">TEXT変更</button> <button class="btn2">SCRIPT変更</button> </body> </html>
■外部JSファイル:test-script-chg1.js
$(function () { //<button class="btn1">のクリックイベントの関数を宣言 $(".btn1").click(function(){ //<div>要素内の<p>の全てのTEXTを変更 $("div p").text("ああああああああ"); }); //<button class="btn2">のクリックイベントの関数を宣言 $(".btn2").click(function(){ //最初のスクリプトを削除 $("script[src='test-script-chg1.js']").remove(); //別のスクリプトを生成 var src = $("<script>").attr({ "type": "text/javascript", "src": "test-script-chg2.js" }); //スクリプト追加 $("head").append(src); //以下の方法でもOK //$("<script>").attr("type","text/javascript").attr("src", "test-script-chg2.js").appendTo("head"); //ボタンを不可設定 $(".btn2").prop('disabled', true); }); });
このJSファイルは、.btn1 と .btn2 のクリックイベント関数を宣言しています。
.btn2 のクリックイベント関数で最初に読込んだJSファイル test-script-chg1.js を削除し、 新しい test-script-chg2.js を読込んでいます。
JSファイルを削除するセレクタの指定がミソなのですが、 このセレクタはHTML要素の script に対して script の引数が test-script-chg1.js であるものを示します。
これは属性フィルタと呼ばれるもので、以下の様に指定します。
$("[属性名='属性フィルタ値']")
「=」 は演算子でこの場合は「属性フィルタ値」と完全に等しいものが対象になります。
演算子は 「=」 の他に以下の様なものが在ります。
- != ... 指定した「属性フィルタ値」と異なる要素
- ^= ... 指定した「属性フィルタ値」と前方一致する要素
- $= ... 指定した「属性フィルタ値」と後方一致する要素
- *= ... 指定した「属性フィルタ値」と部分一致する要素
- ~= ... 指定した「属性フィルタ値」と単語として一致する要素
実際に以下を動作させると、「SCRIPT変更」ボタン押下後は、「TEXT変更」ボタン押下時に div タグ内の全ての p タグのテキストが「いいいいいいい」に変わります。 「ああああああああ」ではないことに注意して下さい。
⇒Javascriptファイルの動的に変更の例
■動的に読込まれる外部JSファイル:test-script-chg2.js
$(function () { //<button class="btn1">のクリックイベントの関数を宣言 $(".btn1").click(function(){ //<div>要素内の<p>の全てのTEXTを変更 $("div p").text("いいいいいいい"); }); });
コメント