jQuery

アコーディオン ドロップダウンメニュー ハンバーガーメニュー

準備

jQueryはJavaScript用のライブラリ。HTMLを動的に操作することは簡単にできる。

利用方法

googleからCDNを使い、HTMLのheadタグ内にてscriptタグを使って読み込む。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 

その下にjQueryの記述場所を以下のようにして設ける。

<script type="text/javascript">
$(function(){
    // ここに記述
    
});
</script> 

基本的な使い方

通常は以下のような形で使用する。

$("セレクタ").メソッド(引数);

セレクタには css でのセレクタを使うことができる。
メソッドの効果はセレクタが適用されるタグ全てに適用される。

//例:IDがabcのタグの中身を「りんご」に変える。
$("#abc").html("りんご");

$("セレクタ")は、jQueryオブジェクトを意味し、そのメソッドである html() を呼び出している。

//例:Pタグで囲まれた部分を全て「りんご」に変える。
$("p").html("りんご");

//例:class=abcのタグの中身を「りんご」に変える。
$(".abc").html("りんご");

//例:divタグの中のbタグの中身を「りんご」に変える。
$("div b").html("りんご"); 

メソッド

タグで囲まれた文字の変更と取得

htmlメソッドで、タグに囲まれた文字を変更できる。

$("#abc").html("りんご"); 

引数を無しにすると囲まれている文字列を取得できる。

例:IDがabcのタグで囲まれた文字列を変数strに代入
var str = $("#abc").html();

htmlと似たメソッドにtext()がある。
htmlではタグを含めて変更できるが、textでは文字列になる。

$("#abc").text("りんご"); 

タグの属性の変更と取得

タグの属性を変更するには attr メソッドを使う。

// aタグのhref属性を yahooにする
$("a").attr("href","http://www.yahoo.co.jp");

引数を属性名だけにするとその値を取得できる。

// aタグのhref属性を取得
var link = $("a").attr("href"); 

inputタグに入力した値の変更と取得

inputタグに入力した値は value 属性で変更・取得できるが、よく使う属性なので、valメソッドが用意されている。

// IDがabcのタグのvalue属性を「テスト」にする
$("#abc").val("テスト");

引数を無しにするとその値を取得できる。

// IDがabcのタグのvalue属性を取得
str = $("#abc").value(); 

スタイルの変更と取得

cssメソッドで、cssを変更できる。

// IDがabcのタグのcssでcolorプロパティをredにする
$("#abc").css("color","red");

引数をcss名だけにするとその値を取得できる。

// IDがabcのタグの色を取得
str = $("#abc").css("color"); 

タグの中身に追加

既存のタグに囲まれた文字列にさらに文字列を追加するには、 append メソッドを使う。

// IDがabcのタグに「テスト」を追加する。
$("#abc").append("テスト"); 

classの追加

既存のタグにclassを追加するには、addClass メソッドを使う。

// IDがabcのタグにclassとして「test」を追加する。
$("#abc").addClass("test");

逆に既存のタグからclassを削除するには、removeClass メソッドを使う。

// IDがabcのタグにclass「test」を削除する。
$("#abc").removeClass("test"); 

主なメソッド一覧

html(文字列)タグの設定(引数無しで取得)
text(文字列)テキストの設定(引数無しで取得)
attr(属性名, 値)属性の設定(値無しで取得)
val(文字列)value属性の設定(引数無しで取得)
data(名前, 値)data-名前 属性の設定(値無しで取得)
css(プロパティ, 値)cssプロパティの設定(値無しで取得)
append(文字列)中身の最後に文字列を挿入
prepend(文字列)中身の最初に文字列を挿入
after(文字列)後に文字列を挿入
before(文字列)前に文字列を挿入
remove()要素の削除
addClass(クラス名)クラスの追加
removeClass(クラス名)クラスの削除
focus()カーソルの移動

イベント

イベントドリブン

イベントは何らかの変化が生じたときに発生する
例:クリックした、キーを押した、etc

イベントドリブン:イベント駆動型プログラミング
特定のイベントが発生したときに何をするか、を定義していくプログラミング手法。
例:IDがabcのボタンをクリックしたときに、色を赤にする。

jQueryでのイベント処理

イベント名のメソッドに対し、関数(function)を渡す。そのfunction の中で、そのイベントが発生したときの処理を行う。

$("セレクタ").イベント名( function(){
    // 処理
});

例:IDがabcのタグをクリックしたとき、h1タグを赤にする。

$("#abc").click( function() {
    $("h1").css("color","red");
}); 

イベント対象への操作(thisの使用)

例えば、h2タグをクリックしたとき、h2タグを赤にするとする。

$("h2").click( function() {
    $("h2").css("color","red");
});

このとき、クリックしたタグのみを赤にしたいときには、this を使う。

$("h2").click( function() {
    $(this).css("color","red");
});

※注:this は""で囲まない

主なイベント一覧

clickクリックしたとき
dblclickダブルクリックしたとき
change変更があったとき
focusフォーカスを取得したとき
blurフォーカスを失ったとき
keydownキーを押したとき
keyupキーを押して上がったとき
mouseoverマウスが上に来たとき

タグの指定

セレクタに検索対象を指定

タグの指定方法では、通常 $(セレクタ) のように指定する。このときには全体からそのセレクタを検索するが、$(セレクタ,検索対象)のように、第二引数に検索対象を指定することができる。

例えば、検索対象に this を指定することで、クリックしたタグ内にある特定のタグを指定できる。

//例:divタグをクリックしたとき、そのタグの中にあるspanタグの色を赤にする。
$("div").click( function() {
    $("span",this).css("color","red");
});

選択系のメソッド

セレクタで指定する代わりに、メソッドを使用し、対象となる要素を指定できる。
例えば、$(セレクタ)で指定したタグの後に .next() を付けることで、次のタグを指定できる。

//例:divタグをクリックしたとき、クリックしたタグの次のタグを赤にする。
$("div").click( function() {
   $(this).next().css("color","red");
});

主な選択系メソッド一覧

next()次のタグ
prev()前のタグ
parent()親のタグ
siblings()兄弟タグ
children()子のタグ
eq(数)数番目

複数のタグを1つずつ処理

複数のタグが対象になるセレクタの場合、eachメソッドを使ってそれぞれのタグを処理することできる。

//例:divタグのうち、中身が abc のタグのみ赤にする。
$("div").each( function() {
    if( $(this).html() == "abc" ){
       $(this).css("color","red");
    }
}); 

アニメーション

アニメーションの基本

showメソッドで表示、hideメソッドで非表示にできる。

$("#abc").hide();

引数にミリ秒単位で数値を指定するとアニメーションを行う。数値は完了する時間を表す。

$("#abc").hide(1000);

切り替える(表示しているときは非表示に、非表示の時には表示に)には toggle メソッドを使用する。

$("#abc").toggle(1000);

表示の仕方により、他のメソッドもある。

主なアニメーション一覧

基本

show表示
hide非表示
toggle表示・非表示切り替え

スライド

slideDownスライドして表示
slideUpスライドして非表示
slideToggleスライドして切り替え

フェードイン・アウト

fadeInフェードインして表示
fadeOutフェードアウトして非表示
fadeToggleフェードイン・アウトの切り替え

独自のアニメーション

animateメソッドで独自のアニメーション効果を作ることができる。

animate( {完了後のCSS} , 時間 , 変化量)

※変化量にはlinear(一定)かswing(徐々に速く)を指定

// 例:100msで幅が500pxになる(徐々に速く)
$("#abc").animate({width:500px},100,"swing"); 

Ajax

Ajax = Asynchronous JavaScript + XML
非同期 JacaScript による XML 通信

ページを切り替えることなく、JavaScriptによりhttp通信を行いXML等のデータを得ること。
最近はXMLに限らず、JSONのデータをやりとりする場合が多い。

HTML等の読み込み

$.get によりajaxでHTMLなどのデータ取得が可能。

$.get(URL,パラメータ,関数);
// 例:URL shouhin でhtmlを返す場合

$.get('shouhin',function(data){
   $("#out").html(data); // id="out" に data を挿入
}); 

一定間隔でのデータ取得

setInterval(関数, 間隔) で行う。間隔はミリ秒単位で指定。その間隔ごとに関数が呼び出される。

function show(){
	$.get('shouhin', function(html){
	   $("#out").html(html);
	});
}
setInterval(show,5000);

JSONの読み込み

$.getJSON によりajaxでJSON形式が取得が可能。

$.getJSON(URL,パラメータ,関数);
// 例:ファイル「test.json」が以下の内容の場合
//{"sname":"りんご","tanka":100}

$.getJSON('test.json',function(json){
   $("#out").html(json.sname);
}); 

JavaでのJSON表示

Gsonをダウンロードし、WEB-INF/libに入れておく。

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// サンプルとして商品ID:1を取得
		ShouhinDAO dao = new ShouhinDAO();
		Shouhin s = dao.findBySid(1);

		Gson gson = new Gson();

		response.setContentType("application/json");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
	    out.print(gson.toJson(s)); // JSON変換
	}

JavaScriptからのPOST

$.post により他ページへPOSTで通信することが可能。

$.post(URL,送信データ,関数);
// 例:
$("#tuika").click(function(){
   var s = $("#sname").val();
   var t = $("#tanka").val();

   $.post( "add.php" , { sname: s , tanka : t} ,
       function(){
           alert("追加しました");
       }
   );
})

これは次のフォームで送信したことと同じ。

<form method="post" action="add.php">
<input type="text" name="sname">
<input type="text" name="tanka">
<input type="submit">
</form>