日付を表示させるの応用で、月により表示させるコンテンツを切替えるスクリプトです。
応用すれば、月だけでなく日や曜日、時刻によっても切替えが可能ですが、ここでは簡単の為、月によりコンテンツを切替える方法を解説します。
スクリプトを実行できる環境なら、以下に現在の季節が表示されます。
月により表示コンテンツを切替えるスクリプト「ContentByMonth.js」は以下の通りです。
now=new Date();
mo=now.getMonth()+1;
if (mo==12 || mo<=2) {
document.write('<p><em>冬ですねえ。</em></p>');
}
else if (mo>=3 && mo<=5) {
document.write('<p><em>春ですねえ。</em></p>');
}
else if (mo>=6 && mo<=8) {
document.write('<p><em>夏ですねえ。</em></p>');
}
else {
document.write('<p><em>秋ですねえ。</em></p>');
}
以下、順番に解説してみます。
以下の一行目の処理で、現在の日時情報を取得します。
now=new Date();
具体的には、nowという変数に新しいDate型のオブジェクトを代入しています。Date型のオブジェクトには、日時に関する情報が入ります。「new Date()」は括弧内で特に指定しない場合、実行時の日時を表わす情報を与えます。
以下の処理で、現在の日時から月の値を取得します。
mo=now.getMonth()+1;
具体的な処理としては、Date型オブジェクトnowから月の値を取出しています。ここで注意したい事として、月は0から始まるので1加えておく必要があるという事です(このスクリプトでは特に必要は無いのですが、間違いが起きにくくなります)。
以下の処理で、
に分けてHTML文書に埋め込むコンテンツを変えております。
if (mo==12 || mo<=2) {
document.write('<p><em>冬ですねえ。</em></p>');
}
else if (mo>=3 && mo<=5) {
document.write('<p><em>春ですねえ。</em></p>');
}
else if (mo>=6 && mo<=8) {
document.write('<p><em>夏ですねえ。</em></p>');
}
else {
document.write('<p><em>秋ですねえ。</em></p>');
}
具体的には、以下の対応する条件に応じてHTMLに埋込むコンテンツを変えています。
「条件A || 条件B」とは「条件Aが成り立つか、さもなければ条件Bが成り立つ事」が条件という条件式を作る論理演算子、また「条件A && 条件B」とは「条件Aが成り立ち、且つ条件Bも成り立つ事」が条件という条件式を作る論理演算子です。
if文は、簡単に言えば「CSSに対応した環境で無ければ、後続の文を実行せよ」というものです。通常if文は単一の条件しか判断出来ませんが、二番目以降に「else if (…) {」を続ける事により、複数の条件を別々に判断できるようになります。更に全ての条件がいずれも満たされない場合は一番最後に「else {」で例外処理を実行できます。
各々のif文で実行されるdocument.write()メソッドは、HTMLを当該箇所に埋込むものです。ここでは<p>要素を埋込んでいますが、<img>要素を埋込めば画像を切替えることも出来ます(当サイトの表紙はこれで画像を切替えております)。
ネットスケープ 4.xでは、複雑なHTMLを埋込もうとすると、スタイルシートが正常に機能しなくなる事があります。画像等の複雑な操作をする場合は、<table>要素の内容とすると安全度が高まります。
または、スクリプト側で<table>要素を出力するのもいいでしょう。
具体的には、スクリプト本体の先頭と末尾に、以下の文を加えます。
document.write('<table summary="ネットスケープ 4.x対策のテーブルです。" border="0" style="border: 0px; "><tr><td style="border: 0px; ">');… (スクリプト本体) …document.write('</td></tr></table>');
ネットスケープ 4.xでは、HTMLを埋込む際に絶対に改行文字(JAVAスクリプトの文字列中には「\n」と書く)を入れないで下さい。入れると途中でHTML文書に不正な改行文字が埋込まれる事があります。
Copyright ©平成15年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com