2011-01-19
jQuery 忘れがちなことメモ「jQuery逆引きマニュアル」編
「jQuery逆引きマニュアル」のモニター当選したので、読みながらメモしよう
第1章 jQuery の基本構文
1-7 イベントを設定したい
foucs と focusin メソッドの違い
focusinメソッドはイベント場部リングでも動作する
$('body').focusin(.. とかできるってことかな?(delegate的なことができる?あとで確認)
mouseover と mouseenter メソッドの違い
マウスカーソルがのった時に実行。mouseoverはイベントバブリング時にも発生
mouseleaveメソッド
マウスカーソルがはずれた際発生
keypress メソッド
文字入力にのみ対応。shiftキー等は、keydownで取得するとのことだが、keypress時に押下状態かを判別するには以下でOK
$('input').keypress(function(e){ e.shiftKey // true or false e.ctrlKey e.altKey })
errorメソッド
$(window).error(function(){... でエラー発生時のイベントを設定できる
unloadメソッド
$(window).unload(function(){... ページを閉じた時のイベントを設定できる
1-9 ブラウザのイベント処理を止めたい
preventDefault href="#"なa要素に使える
例えば
$('body').click(function(){alert('click body')});
とあった場合、
$('a').click(function(e){return false});
だと、click body は表示されないが
$('a').click(function(e){e.preventDefault();});
だと、表示される
もちろんスクロール位置に変化はなし
ダブルクリックをoverride
$('a').dbclick(function(e){ //... }). click(function(e){ e.preventDefault(); });
1-10 繰り返し処理をしたい
callback関数で繰り返し処理
$('ul li').prepend(function(idx){ return idx; });
$('div').css({ width : function(){return $(this).width() * 2;} });
attr,val,html,text,append,prepend,before,after,replaceWith,wrap,wrapInner,offset,addClass,removeClass,toggleClass,css で対応
1-12 セレクタで指定した要素を絞り込みたい
closestメソッド
直近の先祖要素を取得(これってどのVerからあったの?)。たぶんparents('ul:eq(0)')と同じ
parentsメソッド
セレクタ指定した際の説明はたぶん間違い。$('li').parents('body')では body しかとれない
先祖要素群にたいしfindしたようなような挙動になるはず
<div><p><span><a>xxx</a></span></p></div>
で、$('a').parents('p')ならp要素が1つとれるだけ
sliceメソッド
arrayのsliceと同じ
$('div').slice(2) で3個目以降のdiv全てを取得
$('div').slice(2,4) で3〜5個目以降のdivを取得
filterとnotメソッド
filterは指定セレクタで保持オブジェクトの絞り込み、notは指定セレクタ要素を排除する
$('a').not('.foo');
hasメソッド
セレクタ要素を保持する要素を取得(こんなのあったんだ!)
$('p').has('a')//a要素を保持するp要素を取得
andSelfメソッド
1つ前の要素も保持
$('#hoge').siblings().andSelf();//hogeも含まれる
第3章 - jQuery のさまざまなテクニック
3-2 画像プリロード
$('<img/>').attr('src','xxx.jpg');
3-3 ブラウザごとに処理を変えたい
$.browser.safariはjQuery1.4以降は非推奨。$.browser.webkitを使う
version分岐方法、$.supportの詳細仕様は本文を参照
3-9 再帰的に置き換え処理を行いたい
contents()メソッドでテキストノードをjQueryオブジェクト化できる!
<div><p style="color:red">aaa<span style="color:black">xxx</span>bbb</p></div>
aaaxxxbbb
テキストをDOM階層順に置換してみる
$('div').find('*').andSelf().each(function(){ var tag = this.tagName alert(tag + ' element contents is ...'); $(this).contents().each(function(idx){ alert(this.nodeType == 1 ? this.tagName : this.nodeValue); if (this.nodeType == 3) { this.nodeValue = tag + 'のテキスト'; } }) });
こうなる
- DIV element contents is ... P
- P element contents is ... aaa SPAN bbb
- SPAN element contents is ... xxx
PのテキストSPANのテキストPのテキスト
テキストの置換はreplaceWithよりnodeValueを書き換えた方が直観的でわかりやすいかと..
inlineやinline-block要素間の無駄な余白を削除するのに使えそう
こんなマークアップに対し
<div class="navi"> <a>menu</a> <a>menu</a> <a>menu</a> <a>menu</a> </div>
こうすると
$('div.navi').contents().each(function(){ if (this.nodeType == 3) this.nodeValue = ''; });
こうなる
<div class="navi"><a>menu</a><a>menu</a><a>menu</a><a>menu</a></div>
3-12 配列を効率よく操作したい
$.each(['a','b','c'],function(idx,obj){ alert(idx + ':' + obj); //0:a,1:b,2:c });
これでもOK
$(['a','b','c']).each(function(idx,obj){ alert(idx + ':' + obj); //0:a,1:b,2:c }); $('<div>a</div><div>b</div><div>c</div>').each(function(idx,obj){ alert(idx + ':' + obj.innerText); }); $('<div><span/>a</div><div><span/>b</div><div><span/>c</div>').each(function(idx,obj){ alert(idx + ':' + $(obj).contents().get(1).nodeValue); });
- 8 http://kawama.jp/archives/2010/06/ieでpositionrelativeが正常に表示されない.html
- 3 http://www.google.co.jp/search?hl=ja&source=hp&q=eclipse+環境設定 プロキシ&aq=f&aqi=&aql=&oq=
- 3 http://www.google.co.jp/search?hl=ja&source=hp&q=eclipse+proxy+設定&aq=2&aqi=g10&aql=&oq=eclipse pro
- 2 http://search.yahoo.co.jp/search?p=eclipse+環境変数&search.x=1&fr=top_of3_sa&tid=top_of3_sa&ei=UTF-8&aq=&oq=
- 2 http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=jquery+submitボタン
- 2 http://www.google.co.jp/search?hl=ja&biw=1163&bih=747&&sa=X&ei=nuQ3TcuTFYvMuAO98LDGCg&ved=0CBcQBSgA&q=IE6+jquery+ちらつき&spell=1
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=jquery+ctrl+&aq=f&aqi=&aql=&oq=
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=javascript+attr+replace&aq=f&aqi=&aql=&oq=
- 2 http://www.google.co.jp/search?hl=ja&q=ie+jquery+高速化&aq=f&aqi=&aql=&oq=
- 2 http://www.google.co.jp/search?hl=ja&source=hp&biw=1920&bih=864&q=java+web+api+サンプル&aq=f&aqi=&aql=&oq=