じわじわ便利なjQuery1.4で追加された機能いろいろ+α
1月14日にjQuery1.4がリリースされましたが、なかなか手をつけられずにいること早2ヶ月・・・。ようやくちゃんと使ってみようということで色々見てると、それにしても痒いところに手が届くというかなんというか、すばらしいですね。
いまさら感満載なので、みなさん既に知ってると思いますがいくつかメモしておくのと、もしかしたらあんまり知られてないかも知れないjQueryの機能も少し紹介しておきます。
トピックス
- 属性などをまとめて指定+ついでにイベントなどもまとめて指定
- 複数イベントをまとめてbind
- 個別にeasing指定
- アニメーションを指定時間待機させる.delay()
- DOMオブジェクトを丸ごと配列に入れる.toArray()
- .offset()で値を書き込めるようになった
- 1.4じゃないけど、もしかしたらあんまり知られていない機能
- jQueryのメソッドのアクセス方法
- .hover()の真相
属性などをまとめて指定+ついでにイベントなどもまとめて指定
これかなり便利というか、すっきり書けます。
今までも属性はまとめて指定できたのですが、テキストとかイベントとかCSSとかはチェーンで繋いで書いてましたよね。こんな感じに。分かりやすいと言えば分かりやすいけど、やっぱりどうしても読みにくいですね。
$('')
.attr({
id: 'sample',
name: 'sample',
href: 'https://5509.me'
})
.click(function() {
alert('clicked');
})
.css({
paddingBottom: '2.5em',
fontSize: '14px'
})
.text('click me!');
1.4ではこう書けます。。
$('', {
id: 'sample',
name: 'sample',
href: 'https://5509.me',
click: function() {
alert('clicked');
},
css: {
paddingBottom: '2.5em',
fontSize: '14px'
},
text: 'click me!'
});
すっきり!みやすくなりました。
複数イベントをまとめてbind
そうそう、イベントも何回もチェーンで繋ぐと見にくくなって仕方なかったんですよね。下記のようにチェーンを使わずまとめて指定できます。
$('#box').bind({
click: function() {
alert('clicked!!');
},
mouseover: function() {
alert('over!!');
},
mousemove: function() {
alert('move!!');
}
});
ちなみに1.4ではないですけれど、イベントのhandlerが同じならまとめて指定できますね。
$('#box').bind('click focus blur', function(){
alert('matometa!');
});
個別にeasing指定
え・・・?縦横バラバラにeasing指定できるんですか・・・
$('#box').animate({
top: 300,
left: 300
},{
duration: 1000,
specialEasing: {
top: 'easeInOutCirc',
left: 'easeOutBounce'
}
});
ただし、scrollTopとscrollLeftには使えないようです。それはそうか。
アニメーションを指定時間待機させる.delay()
setTimeout()とか使わなくていいんですよ。これまたすっきり書けます。
たとえば、fadeOut()後500ミリセカンド待ってからもう一度fadeIn()させたいときはこんな感じに書けます。
$('#box')
.fadeOut(400)
.delay(500)
.fadeIn(400);
DOMオブジェクトを丸ごと配列に入れる.toArray()
いちいちpushとかする必要ないんです。.toArray()するだけです。
- 1
- 2
- 3
- 4
$('ul>li').toArray();
↓このように配列になります。
['
.offset()で値を書き込めるようになった
うん、これはそうでもないか・・・
$('#box').offset({
top: '10px',
left: '25px'
});
1.4じゃないけど、もしかしたらあんまり知られていない機能
.append()メソッドで複数個のオブジェクトをappendする
.append()はDOMでもjQueryオブジェクトでも何でもつっこめて便利なのですが、これカンマで区切ると複数個入れることができます。
$('#box').append(
'1',
'2',
'3'
);
ちなみに、.after()と.before()でも同じようにカンマ区切りで複数の要素を追加できます。
$('#box').after( // .before
'1',
'2',
'3'
);
jQueryのメソッドのアクセス方法
一般的に.(ドット)で繋いでいきますが、プロパティと同じなので当然、[methodName]でも呼び出せます。
$('#box').click(function() {
alert('clicked');
});
$('#box')['click'](function() {
alert('clicked');
});
追記: .hover()の真相
なにかありそうなタイトルにしましたが・・・
.hover()メソッドでは下記のように、マウスオーバーとマウスアウト時のイベントをまとめて指定できて便利ですよね。
$('div').hover(
function() {
alert('on');
},
function() {
alert('off');
}
);
マウスオーバーとマウスアウトと書きましたが、実は.hover()は.mouseover() / .mouseout() のショートカットではなく、.mouseenter() / .mouseleave() のショートカットです。これらの違いについてはjQuery APIのサンプルを見てもらうのが一番早いと思います。
http://api.jquery.com/mouseover/ – ページ真ん中らへんにDemoがあります。
一度領域に入ってしまえば、enterで、領域から出ない限りleaveにはなりません。何気なく使っていても、特に問題はないところですが、挙動がおかしいと思ったときなどに知っていれば、対処方に辿り着きやすいかもしれません。
まとめ
jQueryを使えば、クロスブラウザも(ある程度は)簡単に対応できるし、やりたいこともたった数行で実現できてしまうので、速度の面とかはとりあえず置いておいて、どんどん色んなことをやってみればいいんだと思います。
Trackbacks: 0
- Trackback URL for this entry
- Listed below are links to weblogs that reference
- じわじわ便利なjQuery1.4で追加された機能いろいろ+α from 5509
Leave a comment