スタートページ> Javascript> jQueryの基礎
jQueryを用いています。head部に <script src="http://code.jquery.com/jquery-latest.js"></script< が必要です。
重要! 例1~例4では、毎回クリックする前に「再読み込み」をしてください。先に行った結果が残るからです。
子ファイルをcalled/called1.htmlとします。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <style>.maroon {color:maroon}</style> <!-- ア --> <script> function funcHead() { alert("called1.html head部script実行"); <!-- イ --> } </script> </head> <body> <script> function funcBody() { alert("called1.html body部script実行"); <!-- ウ --> } </script> <style>.teal{color:teal}</style> <!-- エ --> <tagA> <!-- オ --> <p id="idB">カ <p id="idB"><br> <span class="maroon">キ class="maroon"</span> <span class="teal">ク class="teal"</span> <span class="red">ケ class="red"</span> </p> <!-- コ --> <h4 class="teal">サ class="teal"</h4> シ<button onClick="funcHead()">funcHead実行</button><br> ス<button onClick="funcBody()">funcBody実行</button><br> </tagA> <!-- セ --> <img src="120x80.jpg"><br> <!-- ソ --> <img src="called/120x80.jpg"> <!-- タ --> </body> </html>
<script> function 関数A() { $("#表示場所1").load("called/called1.html"); } // ↑ 表示場所がidで指定されているので#をつける </script> <button onClick="関数A()">関数A()</button> <div id="表示場所1"></div>
|
<script>
function 関数B(ファイル名, 表示場所) {
$(表示場所).load(ファイル名); // 表示場所は引数で#がついている。#表示場所ではエラーになる
}</script>
<button onClick="関数B('called/called1.html', '#表示場所2')">関数B()</button>
<div id="表示場所2"></div>
ファイル名の後に、半角スペース+タグ の形式で範囲を指定します。
<div>や<p>のようなタグが使えます。
<html>のような利用者独自のタグも使えます(google Crome は不許可)。
<html>や<body>のようなタグは使えません。
maroon(ア)、teal(エ)のclassは指定範囲外なので反映されません。 シ・スについても同様です。 ここをクリックする以前に例1などを実行していると、その結果が残っていて反映されてしまいます。 |
子ファイルをcalled/text.txtとします。
called/text.txt(UTF-8)の1行目です。 この上に空白行があり、これは3行目です。ここで改行しています。
改行が無視されます。 |
改行が正しく反映されます。 |
単に外部ファイルを表示するのではなく加工をしたい場合には、読み込んだ内容を変数に格納する必要があります。
それには、ajax(非同期通信)という方法を用います。jQueryでは、次のように記述します。
$.ajax( { url: 'ファイル名', detaType: 'html'|'text', success: function( data ) { // 読み込まれた内容がdataに格納される // 正常に読み込まれたときの処理 } ] )
function 関数C() { $.ajax( { url: "called/text.txt", // 取得ファイル指定 detaType: "text", success: function( 読込文 ) { // データ取得成功後の処理。読み込まれた内容が読込文に格納される var 行 = new Array(); // ┐ 読込文 = 読込文.replace(/\r/g, ""); // ├ 各行に分解する 行 = 読込文.split("\n"); // ┘ var 表示内容 = ""; for (var i=0; i<行.length; i++) { 表示内容 += 行[i] + "<br>"; // 各行にHTMLでの改行コードを付ける } $("#表示場所7").html(表示内容); // HTMLとして表示する } }); }
改行が正しく反映されます。 |
例7での加工をする部分を別関数とし、その関数を親HTMLで記述して、関数名を引数で渡すようにしました。
その関数名を「関数D1」とすれば、関数D1(行) { ・・・ } が必要になります。
function 関数D(ファイル名, 処理関数) { $.ajax( { url: ファイル名, detaType: "text", success: function( 読込文 ) { var 行 = new Array(); 読込文 = 読込文.replace(/\r/g, ""); 行 = 読込文.split("\n"); var 関数 = new Function('行', 'return ' + 処理関数 + '(行)'); 関数(行); // 処理関数(行) が生成される } }); } // 親HTMLで記述する処理関数 function 関数D1(行) { 行[0] = 行[0].replace(/1行目/, "先頭行"); 行[1] = "ここは空白行でした。"; var 表示内容 = ""; for (var i=0; i<行.length; i++) { 表示内容 += 行[i] + "<br>"; } $("#表示場所8").html(表示内容); } <button onClick="関数D('called/text.txt', '関数D1')">関数D);</button>
行[0]と行[1]の内容が変わりました。 |
called/called1.htmlを読み込み、<tagA>の範囲の<h4>を<h2>に置き換え、<tagA>の範囲を表示します。
function 関数E() { $.ajax( { url: "called/called1.html", // 取得ファイル指定 detaType: "html", success: function( 読込文 ) { // データ取得成功後の処理 var 先頭位置 = 読込文.indexOf("<tagA>"); // ┐ var 末尾位置 = 読込文.lastIndexOf("</tagA>") + 7; // ├ <tagA>の範囲だけにする 読込文 = 読込文.substring(先頭位置, 末尾位置); // ┘ 読込文 = 読込文.replace(/h4/g, "h2"); // h4→h2 $("#表示場所9").html(読込文); // 変更した内容を表示 } }); }
例3と比較してください。 サが大きくなっています。 青字になっているのは親ファイルのcssの影響です。 |
例9と同じ処理を、例8のように、変更と表示を別関数で記述する形式にします。
function 関数F(ファイル名, 処理関数) { $.ajax( { url: ファイル名, detaType: "html", success: function(読込文) { var 関数 = new Function('引数', 'return ' + 処理関数 + '(引数)'); 関数(読込文); } }); } function 関数F1(読込文) { var 先頭位置 = 読込文.indexOf("<tagA>"); var 末尾位置 = 読込文.lastIndexOf("</tagA>") + 7; 読込文 = 読込文.substring(先頭位置, 末尾位置); 読込文 = 読込文.replace(/h4/g, "h2"); $("#表示場所10").html(読込文); } <button onClick="関数F('called/called1.html', '関数F1')">関数F();</button>
例9、例10において、読込文の変更処理を正規表現での変更に頼っています。煩雑ですし複雑な処理を行うには不適切です。jQueryを用いた記述ができるのではないかと思うのですが、未解決のままになってます。