スタートページ> 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を用いた記述ができるのではないかと思うのですが、未解決のままになってます。