JavaScriptを外部ファイルから読む

| コメント(0)

1.JavaScriptを外部ファイルから読む

単純作業を繰り返すと人間、飽きてしまうし、ミスも増えます。時間もかかる。 そういう作業は機械にやってもらうのが一番です。

たとえば、複数ページにまたがるWebページを作成するときって、 共通のヘッダやフッタを入れたりしますね。 そういう部分の修正は単純作業です。 修正し忘れがおこったり、面倒くさいといって そもそも修正しなかったり・・・・

ページごとのデザインが変わってしまって Webページの質も落ちてしまうというものです。

今日は、JavaScriptを外部ファイルから読み込んで、 共通のヘッダーを入れ込む方法を紹介し、解説しましょう。

sample.html

<html>
<head>
<script src="jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="my.js" type="text/javascript"></script>
</head>
<body>
<div>
コンテンツ
</div>
</body>
</html>

my.js

$(function(){
$('body>*:first-child').before('<h1>jQuery勉強ブログ</h1>');
});

まずは、こんな風に書いてみましょう。

ファイル構成はこんな感じ。

+ sample.html
+ my.js
+ jquery-1.4.1.min.js

HTMLファイルが1つとJavaScriptのファイルが2つです。

できたらsample.htmlをブラウザで見てみましょう。

どうなりましたか?

jQuery勉強ブログ

コンテンツ

こんな風な表示になりましたでしょうか?

htmlファイルの中には、jQuery勉強ブログっていう タイトルが書いてないのにブラウザではみえていますね。 どうでしょうか。

こんな風にすれば、複数のWebページに 共通のヘッダー部分を表示させたい場合など便利だと 思いませんか?

変更が必要になったときに書き換えなければいけないのは、 my.jsのファイル一つだけ。

管理がとっても楽になります。

では、解説していきましょう。

<script src="my.js" type="text/javascript"></script>

ここの部分の書き方は大丈夫ですか? jQueryを読み込むのと同じ方法で、自分が作った JavaScriptファイルを読み込んでいます。

$(function(){
});

この部分は前回説明しましたね。 「HTMLが操作できるようになったらfunction(){}の中身のJavaScriptを実行しろ」 っていう意味でした。

この文、括弧がやたら出てきて少し分かりにくいですね。さらっと解説しましょう。

この文は、「$()」と「function(){}」の2つの部分に分解できるのです。

function(){}

この部分は、実はjQueryじゃありません。素のJavaScriptです。 「関数」といって、命令文を一個にまとめて置くための書き方です。

前回、素のJavaScriptの解説で

var print_box = function(){<内容>}

といった書き方を説明しましたね。それと同じです。

$()

・・・この部分、jQueryを勉強しているとよく見かけませんか? 要素を選択するときに「$('#box')」などとしましたね。それと同じ・・・・同じなんです。

$()が実は、jQueryの本体なんです。

jQueryは賢いですから、 括弧の中に関数が入っていたら 「HTMLが操作できるようになったらfunction(){}の中身のJavaScriptを実行しろ」 ってブラウザに命令するんだなって解釈します。

括弧の中にCSSで要素を選択する書き方(セレクターといいます。)が 記述してあったら要素を操作する準備をします。

そういうことです><

「$()」、この中にはまだまだいろんなものが入れられますので、 のちのちまとめて解説することになると思います・・・。

とりあえず今は、

1.「$()」がjQueryの本体で、
2.セレクターを入れれば要素を操作する準備をするんだな。
3.関数を入れれば準備ができた時点で関数を実行するんだな。

・・・程度に覚えていただければと思います。

$('body>*:first-child').before('<h1>jQuery勉強ブログ</h1>');

さて、次は、続いてこの部分を解説しましょう。

$('body>*:first-child')

この部分の書き方は、

bodyタグの直下にあるすべての要素のうち一番最初の要素を選択して 操作する準備をする

ということを書いてあります。

このサンプルからいうと

<div>コンテンツ</div>

の部分になります。

$('div')

だと複数個Div要素がでてきたときにでてきたDiv要素すべてを 選択してしまいますね。

かといって、

<div id="first">

なんてするのは面倒くさい。 なにしろ複数ページのメンテナンスを簡単にするのが 今回の目的ですからね。

body>*

この部分は、CSSに詳しいかたなら使っているでしょうか。

<body>
<div>
<h1>サンプル</h1>
</div>
</body>

こんな風に要素が入れ子構造になっていたとしますね。

body *

こんな風に書いたらdiv要素もh1要素も選択されます。 bodyタグに直接囲まれている要素だけ選択したい場合の書き方が「body>*」です。

さて、bodyの中の一番上の要素を選択できました。

そして、今回は、その一番上のさらに上に ヘッダーを書き加えたいのでした。

$('body>*:first-child').before('<h1>jQuery勉強ブログ</h1>');

それがこの部分です。 一番上の要素のさらにその手前に括弧内の文字を加えなさい っていう意味です。

ですから、このJavaScriptが実行されたとき、 (HTMLが読み込まれた後、画像が読み込まれる前でしたね)

<body>
<div>
コンテンツ
</div>
</body>

が、

<body>
<h1>jQuery勉強ブログ</h1>
<div>
コンテンツ
</div>
</body>

こんな風に書き換わるのです。

では、逆にページの1番下を外部から操作してみましょう。

my.js内をこんな風に書き換えてみましょう。

$(function(){
$('body>*:first-child').before('<h1>jQuery勉強ブログ</h1>');
$('body>*:last-child').after('<address>m-yamamoto</address>');
});

これで、ヘッダとフッタが自動的に書き込まれたはずです。 どうでしたでしょうか。

ページの一番下に書き加えたいときは、

$('body>*:last-child').after();

こんな風に書きます。

最初のサンプルのfirstがlastになり、 beforeがafterになっただけですね。

では、次回からは、いよいよ要素を動かして いく方法について説明していきたいと思います。

コメントする