- ブログネタ:
- 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インストール編]](https://resize.blogsys.jp/7061d103cdf4023bd0432e6d14fd9030ccbd44a0/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/e/0/e0cb906b.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/f86fa58193158d24484b5579aba301d8465044e0/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/4/f/4f5406de.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/47cee24316990c5bf1b72aea44db66886e569c28/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/1/a/1af167ad.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/a71a027fc1a6cf5cfcd30133293a8ec5a94d487c/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/0/2/02fa5750.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/e19e52d0d0e56a97cb4dc95dedccf5c89f2ec3f8/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/8/e/8e11782c.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/cea87a3a1baa82d379c77dde461963850426b855/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/e/9/e93e7fd2.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/bcd02a36706c2768e1880ea85f7fb635067179ff/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/b/d/bd37cf4a.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/1a42734cbdc841304b4b2c4fa37bb096c60bb157/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/b/b/bbc9870a.gif)
![Eclipse + ChromeでJavaScriptデバッグ [Google Chrome Developer Toolsインストール編]](https://resize.blogsys.jp/ddca061b7482d5ab0c25fa2f5cb097ae17f20d16/crop1/100x100_ffffff/http://livedoor.blogimg.jp/eeu/imgs/1/4/14a1b359.gif)