JavaScriptで時間を取得してHTMLを操作するチュートリアル。
ある項目の、受付開始と同時に掲載を行い、受付終了後にメッセージを変更したいという要望がありました。
PHPで作ろうと思ったら、PHPが動かないサーバだったので、JavaScriptで作ったメモです。
配列を設定したり、時間を取得して操作したり、jQueryでDOM操作したり、基礎的な内容が詰まっているような気がしたので書いておきます。
必要な機能のまとめ
- 告知開始日になったら情報を表示させる。
- 告知終了日には、備考欄のテキストを変化させる。
- 表示される情報は複数になる。
実際これだけなので、割とわかりやすいと思います!
実際に作ってみる。
とりあえず、HTMLでテーブルを作って、テーブル内をDOM操作することで書き換える感じでやってみることに。
実際に作ってみたデモはこんな感じです。
HTMLの準備
HTMLでテーブルの雛形を作っていきます。
<table id="table"> <tbody> <tr> <th>タイトル</th> <th>公開日</th> <th>締切日</th> <th>備考</th> </tr> </tbody> </table>
こんなhtmlにしてみました。
thタグのあるhrの下の段以降に
<table id="table"> <tbody> <tr> <th>タイトル</th> <th>公開日</th> <th>締切日</th> <th>備考</th> </tr> <tr> <td>タイトルA</td> <td>2013年4月1日</td> <td>2013年4月5日</td> <td>詳細はこちら!</td> </tr> </tbody> </table>
というような感じにHTMLを追加して、現在受付中のものを表示させることにします。
JavaScriptでお手軽にDOM操作するなら、お約束でjQueryを使いたいので、
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
こんな感じでjQueryはさくっと読み込んでおきましょう。
実際にJavaScriptを書いてみる。
ここからはJavaScriptで色々書いてみました。
$(function(){ // 配列で処理するデータを設定 var items = new Array(); //タイトル,開始日,終了日,受付中の備考,受付終了後の備考 時刻は月/日/年 時間で設定 items[0] = new Array("タイトルA", "3/1/2013 9:00:00", "4/5/2024 17:00:00", "詳細はこちら!", "受付は終了しました!"); items[1] = new Array("タイトルB", "3/1/2013 9:00:00", "3/5/2013 17:00:00", "詳細はお電話で!", "受付は終了しました!"); items[2] = new Array("タイトルC", "3/1/2013 9:00:00", "4/5/2024 17:00:00", "詳細はメールで!", "受付は終了しました!"); $.each(items,function(i){ //日付の取得 var today = new Date(); //開始日取得 var start = new Date(items[i][1]); //開始日整形 var syear = start.getFullYear(); var smonth = start.getMonth()+1; var sdate = start.getDate(); //終了日取得 var limit = new Date(items[i][2]); //終了日整形 var lyear = limit.getFullYear(); var lmonth = limit.getMonth()+1; var ldate = limit.getDate(); if(today >= start){ if(today <= limit){ $("#table").append("<tr><td>"+items[i][0]+"</td><td>"+syear+"年"+smonth+"月"+sdate+"日</td><td>"+lyear+"年"+lmonth+"月"+ldate+"日</td><td>"+items[i][3]+"</td></tr>"); }else{ $("#table").append("<tr class="finished"><td>"+items[i][0]+"</td><td>"+syear+"年"+smonth+"月"+sdate+"日</td><td>"+lyear+"年"+lmonth+"月"+ldate+"日</td><td>"+items[i][4]+"</td></tr>"); } } }); });
2次元配列でデータを格納し、jQueryのeachでループして表示。
その際に、現在の日付・時刻の情報と照らし合わせて表示を書き換えています。
公開日を過ぎている場合
→表示
公開日を過ぎているが、締切日も過ぎている
→参照先を変更して表示
という感じですね。
ここまでやっておいてなんですけど、正直PHPでやれるならPHPでやりますよね。
ソース見たら情報全部見えちゃうし!
というわけで、実用性はほぼないですが、jQueryのちょっとしたチュートリアルくらいにはなるのかなあ。
配列をJSONから取ってきたり、フォームから操作したり、いろいろ書き足せばAjaxを覚えるための基礎になったりするのかなあと思ったり。