Sponsored Link
JQueryの基礎
基本
bodyの閉じタグの部分にjQueryを読み込むようにする(場合によってはheadに書いたほうがいい場合もある)
はじめ方は
$(docment).ready(function() { //ここに色々な処理を書く });
もしくは、
$(function() { //ここに色々な処理を書く });
と省略して書くこともできる。
用語
処理を書くにあたり、色々な用語がある
- セレクタ
処理対象となるDOM要素を指定する記法 - メソッド
処理 - メソッドチェーン
メソッドをつなげて書くこと$(function() { $('p').css('color', 'red'); //$('セレクタ').メソッド; //$('セレクタ').メソッド.メソッド;=>これがメソッドチェーン });
id,classの指定
基本はCSSと同じ。
id属性は#
class属性は.
「,」「空白」「>」「+」の使い方もCSSと基本は同じ
$(function() { $('#id').css('color', 'red'); $('.class').css('color', 'red'); });
フィルタ
<ul id="main"> <li>1</li> <li>2</li> <li>3</li> </ul>
$(function() { $('#main > li:eq(1)').css('color', 'red'); });
■よく使うフィルタ
- :eq()
指定した添字に対して、記載されたメソッド処理をする。
添字は0始まり - :gt() :lt()
gtは添字より大きい要素
ltは添字より小さい要素
添字が0始まりの為注意。 - :even :odd
evenは偶数
oddは奇数
evenは0を含める
oddは0を含めない - :contains()
Textの中身を含むものを適用させる
li:contains("3");
と指定すれば、要素の中身に3が含まれるものが適用される。 - :first :last
firstは一番最初の要素
lastは一番最後の要素
メソッドを使ったDOM要素
<ul id="main"> <li>1</li> <li class="item">2</li> <li>3 <ul id="sub"> <li>3-1</li> <li class="item">3-2</li> <li>3-3</li> <li class="item">3-4</li> <li>3-5</li> </ul> </li> </ul>
$(function() { $('#sub').parent().css('color', 'red'); });
■よく使うもの
- parent() children()
- parentは親要素
$('#sub').parent().css('color', 'red');
で、親要素のliを含めた要素に適用される。 - childrenは子要素
$('#sub').children().css('color', 'red');
で、子要素にのみ適用される。
- parentは親要素
- next() prev()
- nextは次の要素
$('#sub > li:eq(2)').next().css('color', 'red');
で、li:eq(3)
に適用される - prevは前の要素
$('#sub > li:eq(2)').prev().css('color', 'red');
で、li:eq(1)
に適用される
- nextは次の要素
- siblings()
自分を含めない兄弟要素に適用される
$('#sub > li:eq(2)').siblings().css('color', 'red');
属性セレクタを指定する
<p><a href="http://google.com">Google</a></p> <p><a href="http://yahoo.co.jp">Yahoo!</a></p> <p><a href="http://example.com">example</a></p>
$(function() { $('a[href="http://yahoo.co.jp"]').css('color', 'red'); });
■よく使うもの
基本的には、JavaScript等の演算子と同じ。
- =
一致する - !=
一致しない - *=
含む - ^=
先頭文字 - $=
最後文字
色々なメソッド
メソッドは値を取ることも出来る。
$('a[href="http://yahoo.co.jp"]').css('color');
と指定すれば、現在の色の値を取得することが出来る。
<p><a href="http://google.com" data-sitename="google">Google</a></p> <p><a href="http://yahoo.co.jp">Yahoo!</a></p> <p><a href="http://example.com">example</a></p>
- addClass/removeClass
セレクタに、クラスを付けたり。削除したりすることが出来る。
$('p').addClass('myStyle');
とすれば、p要素にmyStyleというクラスがつく。
$('p').removeClass('myStyle');
とすれば、p要素についているmyStyleというクラスを削除することが出来る。 -
attr
要素の属性の値を取得・操作する。複数一致する条件がある場合は、一番最初に一致したものを取得する。
$('a').attr('href');
と指定すると、「http://google.com」を取得する。
$('a').attr('href', 'http://google.co.jp');
とすれば、hrefの値を「http://google.co.jp」に書き換える。 -
prop()
- 属性の真偽値を取得する。(disable, checked, selected, multiple)
- 属性の値を取得する。(id, name等)
http://qiita.com/kbyay_/items/7a7ce9547f29b34a63b1
- data
カスタム属性の値を取得・操作する
$('a').data('sitename');
とすれば、data-sitenameの値をとることが出来る。 -
text
要素の中身の取得や変更する
$('p').text();
で、Googleを取得する
$('p').text('グーグル!');
で、中身を「グーグル!」に変更することが出来る。 -
html
要素を含めた中身を取得・変更する
$('p').html();
で、「<a href="http://google.com" data-sitename="google">Google</a>
」を取得する
$('p').html('<span>Test!!!!!!</span>');
で、a要素はなくなり、span要素を含めたhtmlが上書きされる。 -
val
フォーム部品に使用する。
<input type="text" value="Hello!">
というフォームがあったとすると
$('input').val();
で、「Hello!」を取得する。
$('input').val('GoodBye!!');
で、「GoodBye!!」に上書きする。 -
remove
要素を含めた中身を空にする。
$('p').remove();
p要素が消える。(子要素も含めて全部消える) -
empty
中身だけを空にする
$('p').empty();
これは、p要素は残る。(子要素は消える)
■要素を追加する
<ul> <li>1</li> <li>2</li> <li>3</li> </ul>
$(function() { var li = $('<li>').text('新しいリスト'); $('ul > li:eq(1)').before(li); //li.insertBefore($('ul > li:eq(1)'));上と同義 });
- before/insertBefore
指定の要素の前に、別の要素を追加する
$('セレクタ').before('追加要素');
追加要素.insertBefore($(‘セレクタ’)); -
after/insertAfter
指定の要素の後に、別の要素を追加する
$('セレクタ').after('追加要素');
追加要素.insertAfter($(‘セレクタ’)); -
prepend/prependTo
子要素の先頭に指定要素を追加する
$('セレクタ').prepend('追加要素');
追加要素.prependTo($(‘セレクタ’)); -
append/appendTo
子要素の末尾に指定要素を追加する
$('セレクタ').append('追加要素');
追加要素.appendTo($(‘セレクタ’));
■エフェクト
文字指定では
slow, nomal, fastのいずれか
数値ではミリ秒単位で指定をする。
要素そのものが消えるわけではない。
- 消す
- hide
$(‘セレクタ’).hide([speed][,callback]);
hide(‘slow’);//文字指定
hide(800);//ミリ秒指定 - fadeOut
$(‘セレクタ’).fadeIn([speed][,callback]);
- hide
- 表示する
- show
$(‘セレクタ’).show([speed][,callback]);
show(‘slow’);//文字指定
show(800);//ミリ秒指定 -
fedeIn
$(‘セレクタ’).fadeIn([speed][,callback]);
- show
-
両方
toggle
$(‘セレクタ’).toggle([speed][,callback]);
表示されていたら消す。非表示であれば表示する。
■イベント
- click
$('セレクタ').click(function(){ //ここに処理を書く });
- mouseover
$('セレクタ').mouseover(function(){ //ここに処理を書く });
- mouseout
$('セレクタ').mouseout(function(){ //ここに処理を書く });
- mousemove
$('セレクタ').mousemove(function(){ //ここに処理を書く });
<div id="box" style="width:100px; height:100px; background:#f00;"></div>
$(function() { $('#box').mouseover(function(){ $(this).css('background', '#00f'); }) .mouseout(function() { $(this).css('background', '#f00'); }) .mousemove(function(e) { $(this).text(e.pageX); }); });
※重要※
thisは自分自身を表す。
上記の例であれば、「#box」がthisとなる。
クラスの場合も、クラス全体ではなく同クラス中の自分自身を表す。
mousemoveにはイベントオブジェクトを渡すのが一般的。
基本的には上記のように.mousemove(function(e) {}で指定をする。
イベントについては、下記の公式ページを参照
http://api.jquery.com/category/events/event-object/
<div id="box" style="width:100px; height:100px; background:#f00;"></div> <button>Click Me!!!!!</button>
$(function() { $('button').click(function(){ $('#box').toggle(800); }); });
■フォーム部品で使えるもの
- focus
$('セレクタ').focus(function(){ //ここに処理を書く });
- blur
$('セレクタ').blur(function(){ //ここに処理を書く });
- change
$('セレクタ').change(function(){ //ここに処理を書く });
<input type="text" id="name"> <select name="members" id="members"> <option value="">1</option> <option value="">2</option> <option value="">3</option> </select>
$(function() { $('#name').focus(function() { $(this).css('background', 'red'); }) .blur(function() { $(this).css('background', 'white'); }); });
$(function() { $('#members').change(function() { alert($('#name').val()); }) });
■動的にjQueryを動かす
- on
$('セレクタ').on(events [, selector ] [, data ], function(eventObject) { //ここに処理を書く });
<div> <button id="add">Click Me!!!!</button> </div>
$(function() { $('#add').click(function() { var p = $('<p>').text('増やしたよ!').addClass('addP').css('color', 'red'); $(this).before(p); }); //この下のが消えない $('.addP').click(function() { $(this).remove(); }); });
一番初めにjQueryを読み込んだ時には、addPというクラスを持ったセレクタが存在していないため作動しない。
$(function() { $('#add').click(function() { var p = $('<p>').text('増やしたよ!').addClass('addP').css('color', 'red'); $(this).before(p); }); //これで消える $('div').on('click', '.addP', function() { $(this).remove(); }); });
親要素を指定して、on以降を充てたい要素に対してイベントを記載していくこと。
今回はhtmlの例でdivで囲んだが、単体の場合はbody要素が親になると思うので、bodyを指定すればOK
■Ajaxを使う
- Ajax
非同期通信 - 非同期
処理が終わる前に次の処理へ移る。
サーバーからの情報をJavaScriptで取得する。
ブラウザ側で一々ページを読み込み直すことなく、
ユーザーの動作に合わせて、一部分のみページの内容を更新することが出来る。
- load
サーバーから情報を取得する。- Ex.1)sample.htmlの中身をAjaxでindex.htmlのdiv内に表示させる
サーバー内に
index.html
sample.html
が入っているものとする。ボタンをクリックしたら、サーバーからsample.htmlをloadする。
<p>追加するよ!!!</p>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Sample</title> </head> <body> <div id="more"></div> <button>Click Me!!!!</button> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function() { $('button').click(function() { $('#more').load('sample.html'); }); }); </script> </body> </html>
※注意※
非同期通信のため、読み込んだsample.htmlに何か装飾等をしたい場合にはコールバック関数を使用する。$(function() { $('button').click(function() { $('#more').load('sample.html'); //sample.htmlでloadした文を赤くしたい $('p').css('color', 'red'); }); });
これだと、sample.htmlが読み込まれる前に、$(‘p’).css(‘color’, ‘red’);が実行されてしまうため赤くならない。
$(function() { $('button').click(function() { $('#more').load('sample.html', function() { $('p').css('color', 'red'); }); }); });
loadメソッドの引数にコールバック関数を指定すれば、loadした後に実行される。
- Ex.1)sample.htmlの中身をAjaxでindex.htmlのdiv内に表示させる
- get/post
フォームの値をとってくる。- $.get
フォームの値を取得するのみ
$.get( url[, data][, callback][, dataType]) - $.post
データを更新する場合はpost
$.post( url[, data][, callback][, dataType])
- Ex.1)入力した値をgreed.phpに投げて、その結果を表示する。
<div> <input type="text" name="str" id="name"> <input type="button" id="greed" value="Greed!!!"> </div> <p id="result"></p>
echo htmlspecialchars('hi!' . $_GET['name'], ENT_QUOTES, 'UTF-8');
$(function() { //id="greed"がクリックされたら発火 $('#greed').click(function() { //greed.phpにid="name"の入力値をgetで渡す $.get('greed.php',{ name: $('#name').val() //dataはgreed.phpの中身 } , function(data) { $('#result').html(data); }); }); });
※nameというパラメータで渡しているため、greed.php側では$_GET[‘name’]で値を取得することが出来る。
- Ex.2)複数の値を受け取りたい
<div> <input type="text" name="str" id="name"> <input type="button" id="greed" value="Greed!!!"> </div> <p id="result"></p>
//連想配列でパラメータと値を入れる $arr = [ "message"=>htmlspecialchars('hi!' . $_GET['name'], ENT_QUOTES, 'UTF-8'), "length"=>mb_strlen($_GET['name']) ]; //json形式で渡す header('Content-Type: application/json;charset=utf-8'); echo json_encode($arr);
$(function() { $('#greed').click(function() { $.get('greed.php',{ name: $('#name').val() } , function(data) { $('#result').html(data.message + '(' + data.length + ')'); }); }); });
getで送ったデータを取得する際に、コールバックで指定した引数+連想配列名で取得できる。
今回の場合は、
data.message
data.length
で、データを取得できます。
- $.get