はじめに
第2回の今回からは本格的にjsdo.
今回はjQueryの基本のお題編ということで、
jQueryってなに?
そもそもjQueryとはなんでしょう。まったく知らないという人もいれば名前くらいは聞いたことがある、
jQueryというのは一言で言うとJavaScriptをより簡単かつ直感的に書くことができるようになるライブラリです。JavaScriptの面倒なところの1つにクロスブラウザの問題があります。IEやFirefox、
そこでjQueryなどのライブラリを使うと、
たとえば、
var element = document.getElementById('btn');
function clickHandler() {
// クリックしたときの処理
}
// IE以外の時の処理
if (element.addEventListener) {
element.addEventListener('click', clickHandler, false);
}
// IEのときの処理
else if(element.attachEvent) {
element.attachEvent('onclick', clickHandler);
}
$('#btn').click(function() {
// クリックしたときの処理
});
この例ではコードがどういう意味かというところまでは解説しませんが、
jQeuryの他にもこのようなライブラリはたくさんあります。こういったライブラリの火付け役になったPrototype.
jQueryを学ぶ前に
jQueryを学ぶ前に、
jQuery API
jQuery本家のAPIリファレンスです。わからないことがあったらとりあえずここを見る習慣をつけるといいと思います。英語が読めなくてもサンプルやデモも多くあるのである程度の内容ならわかりやすくなっています。
jQuery日本語リファレンス
こちらは日本語版のリファレンスです。公式ではありませんが、
はじめてのjQuery
こちらはスライドの資料です。とてもまとまっていて、
Introducing jQuery
これもスライド資料ですが、
jQueryの基本
jQueryでのプログラムは基本的にHTMLの要素を取得して、
HTMLの要素を取得する
まずjQueryは何かHTMLの要素をとってこない何も始まりません。HTMLの要素を取得するには以下のように書きます。
$(セレクタ)
この$()という記述がjQeuryの記述方法です。セレクタにはCSSのセレクタを使うことができます。CSS3のセレクタにも対応していますし、
// 全てのdiv要素
$('div');
// id属性がfooの要素
$('#foo');
// class属性にfooという値が含まれる要素
$('.foo');
// class属性にfooという値が含まれる要素の子要素のdiv要素
$('.foo div');
// input要素のうちtype属性の値がtextの要素
$('input[type="text"]);
// チェックされている要素(radioボタンなど)
$(':checked');
// div要素の先頭の要素
$('div:first');
// div要素の最後の要素
$('div:last');
// div要素のうちインデックスが1のもの(インデックスは0から順番にふられる)
$('div:eq(1)');
// h1やh2などのheader要素
$(':header');
いくつかの例のデモを用意しましたので実際にさわってみてください。
ふだんCSSを書いている人は見慣れたものあればそうでないものもあるかもしれません。とりえあえず最初はCSSのセレクタで要素が取得できるということを覚えておくといいと思います。また、
var $foo = $('.foo');
// .fooの以下にあるdiv要素(.fooは含まない)
$('div', $foo);
$foo.find('div');
// .fooのうちdiv要素のもの(.fooのみが対象)
$foo.filter('div');
このようにHTMLの要素を取得するというだけでも色々な方法があります。ここで取得したものをjQeuryオブジェクトといい、
取得したものに対して操作する
jQeuryを使って取得したjQeuryオブジェクトに対して何か操作をするには、
// 要素を非表示にする
$('.foo').hide();
// 要素を表示する
$('.foo').show();
// 要素の表示/非表示を切り替える
$('.foo').toggle();
// 要素のcssを設定する
$('.foo').css('color', 'red');
// 要素のcssの値を取得する
$('.foo').css('color');
// 要素の中身のHTMLを書き換える
$('.foo').html('<p>bar</p>');
// .foo要素の末尾に要素を追加する
$('.foo').append('<p>bar</p>');
// 要素を削除する
$('.foo').remove();
// 属性値を設定する
$('.foo').attr('id', 'bar');
// 属性値を取得する
$('.foo').attr('id');
// 属性値を複数指定する
$('.foo').attr({
src: 'bar.png',
alt: 'bar',
});
// classを追加する
$('.foo').addClass('bar');
// classを削除する
$('.foo').removeClass('bar');
こちらもいくつかデモで用意しました。
またこれらのメソッドをでつなげて書くこともでき、
// cssを変更してclassを追加して中身のHTMLを書き換える
$('.foo').css('color', 'red').addClass('bar').html('<p>bar</p>');
このように、
イベントについて
ここでJavaScriptを知る上で大事な、
jQueryでイベントの設定をおこなうには以下のように記述します。
// イベントハンドラ
function clickHandler() {
alert('clicked!');
}
// elementのclickイベントに対してclickHandlerをバインドする
$('.btn').bind('click', clickHandler);
jQueryではbind()を使ってイベントを設定します。また、 さらに、 このスクリプトは以下で確認できます。 イベントは多少わかりにくいところもありますが、 それでは最後に今回のお題を掲載します。 今回はマウスオーバーするとサブメニューが表示されるようなナビゲーションをjQueryで作ってみましょう。HTMLとCSSはあらかじめ書いてありますので、 余裕のある人は単にサブナビゲーションの表示・ 今回のお題ではマウスオーバーしたときに表示にして、 もちろん個別に設定しても大丈夫です。jQueryにはこのようによく使う機能にはショートカットが用意されていることが多いです。また、 それでは次回はこのお題について解説したいと思います。$('.btn').click(clickHandler);
$('.btn').click(function() {
alert('clicked!');
});
今回のお題
概要
ヒント
$(element).hover(
function() { マウスオーバーのときの動作 },
function() { マウスアウトのときの動作 }
);