jQuery :: セレクタを使いこなす10のTraversing機能
2009/9/10 (Thu) at 7:00 pm
Nettuts+にセレクタを使いこなすための10のTraversingワザってのが載ってました↓
10 Really Helpful Traversing Functions in jQuery
レビューサイト等でよく使われるレーティングのガジェット、ユーザーがクリックするとスターマークが点いたり消えたりするヤツですね、あれを例題にして、jQueryのセレクタの機能についてチュートリアルしています。記事を読んだだけだとフーンってなかんじで忘れちゃいそうなので、例題サンプルの意味を日本語で書き出してみました。
元記事の方では、わかりやすい図版といっしょに解説されています。英語苦手な方はそっちの絵を見ながら読んだらいいかもです。
紹介されているものの中には「知ってるけどいままであまり使ってなかったもの」ってのがいくつかあって勉強になりました。jQueryのセレクタはむずかしいパズルみたいですよね。わ、わ、ワカラン!!!!と投げ出したくなると、idを量産して$('#ナントカ〜')で逃げてしまうという後ろ向きなことをよくやってます。あるいは、idを基点にしてどーこーするとかですね、たとえば、
$(this).parent().attr('id');
でthisの親要素のidを取得できるんで、それになにかキメの文字列、たとえば '-block' とかつけて、関連要素を選択したりとかですね、そういうことをよくやるんですが、この記事で紹介されているようなワザを使えば、write less, do moreな人生があったのかもしれないなと反省しつつ。
そういう話をだれかとしていましたら、id名で選択するのは動作速度向上の点からいって悪いことではないのですよと教わりましたが、それはそうなんでしょうけど、むやみやたらとidをつけまくるというのもバカっぽいかんじがしますし、また、元記事の方にも書かれている通り、それで対処しきれないケースもあるわけなので、こういうのもパパッと使えるようになりたいなと。
知らないヤツもありました。parents(←最後にsがある!)なんてあったのですね。これはparentと違って、body, htmlまで遡ってすべてのご先祖様を一挙選択できるそうです。実際にそんな使い方をしたらやたら重くなるでしょうから、あるていど範囲を限定しつつという使い道がよさそうですが。
1. children
$('.rating').children('.on');
クラス名ratingを持つ要素の子供たちの中から、クラス名がonの要素を選択する。
2. filter
$('.star').filter('.on');
クラス名starを持つ要素の中からクラス名onの要素だけを選択する。
3. not
$('.star').not(':even');
クラス名starを持つ要素の中から、偶数番目の要素を除外し、残った要素を選択する。
4. add
$('.star').add('.photo');
クラス名starを持つ要素を全選択し、さらにその中にclass名photoを持つ要素を含めて選択する。
5. slice
$('.star').slice(0, 2);
クラス名starを持つ要素の中から、index値0から始まって2番目までの要素を選択する。
6. parent
$('.star:first').parent();
クラス名starを持つ要素の中の最初の要素の、親要素を選択する。
7. parents
$('.star:first').parents('.container');
クラス名starを持つ要素の中の最初の要素の、すべての先祖(body, html要素まで遡る)の中から、クラス名containerを持つ要素を選択する。
8. siblings
$('.star:first').siblings(':odd');
クラス名starを持つ要素の最初の要素の、兄弟要素の中で、index値が奇数である要素を選択する。
9. prev & prevAll
$('.rating:nth-child(3)').prevAll();
クラス名ratingを持つ要素の中の、3番目の要素から見て、ソレより前の兄弟要素をすべて選択する。
10. next & nextAll
$('.rating:nth-child(3)').nextAll();
クラス名ratingを持つ要素の中の、3番目の要素から見て、ソレより後ろの兄弟要素をすべて選択する。
----------
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)

追記。
traversingはやりすぎると動作にむだが生じるというか、重くなると思うんで、実際に使うときには、
$('..........', '#foo').bar(.....);
てなかんじで、範囲を限定しつつやったほうがよいと思われます。