- 共通テーマ:
- JavaScript テーマに参加中!
jQueryのイベントハンドラやコールバック関数内のthisについてです。
大した内容でもありませんが、なんとなく知らないまま使っている人もいるみたいなので、ちょっとメモ書き。
$(this)とthisの違い
thisはDOMエレメントです。
イベントハンドラのthisはそのイベントが発生した要素、eachのコールバック関数内のthisは順番の回ってきた該当する要素です。
一方$(this)の方はと言うと、この要素を$関数に渡して、単にjQueryオブジェクト化しているだけなんですね。
使い分け
という事で、使い分けは、
- DOMエレメントのプロパティやメソッドを使うときはthis
- jQueryオブジェクトのメソッドを使いたいときは$(this)
ということになります。
例えば
a要素のhref属性を取ってきて何か処理を書こうと思ったとき、
何も考えず普通にjQueryを使って書くとこうなりますが、
$('a').each(function() {
var l = $(this).attr('href');
…
});
使わない方が速くて簡単だったりします。
$('a').each(function() {
var l = this.href;
…
});
状況に応じて使い分けるのが良いですね。
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/1d294f9f35fb3d4e1d1a078db21d5a80aac607cc/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/e/0/e0cb906b.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/b40a6b5b93f1928050656d824569f90fdd7b0eda/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/4/f/4f5406de.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/70699955a995b3dbf3a46b793a0a3adf0682b5e2/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/1/a/1af167ad.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/b5c86b6fd58a4ee8b61847c0929d94146d0ed276/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/0/2/02fa5750.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/5c4cbbba9a2845b5f61f99348f6787bbbedda0e5/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/8/e/8e11782c.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/ba9763251daa36d3177f5997aecdb165139573cf/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/e/9/e93e7fd2.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/921a0042fb2e83875498946c682e3b3c271afcfd/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/b/d/bd37cf4a.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/4f485d7baaf470cea4944b70bfa1ba489c3dfcd2/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/b/b/bbc9870a.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](http://resize.blogsys.jp/0f558c82896edffb67b614d0e97b4564315911e1/crop1/50x50_ffffff/http://livedoor.blogimg.jp/eeu/imgs/1/4/14a1b359.gif)