jQuery:1.3の新機能「live」を試してみる
jQueryのバージョンが1.3になって増えた新機能「live()」
いまいちよく使い方がわかっていなかったので、
勉強をかねてのメモエントリーを残しておきます。
新機能live()
詳しくないので調べてみた。
live(type, fn) - jQuery 1.3.1 日本語リファレンス
んーいまいちピンとこないのですが、
追加した要素にもイベントが登録されるというのはわかった。
普通にclick()じゃダメ?
では、通常のとliveを使った場合と
その二つを作って見比べてみることにした。
まずは通常にclickを使った場合。
■通常のclickの場合
$(".live").click(function(){ $(this).after('<p>ここをクリックしても何もない</p>'); });
■プレビュー
クリックで要素追加
見てわかると思うのですが、
最初からある部分以外でクリックしてもなにも変化ないです。
最初の部分であれば、何度クリックしても追加されるようになっていますが、
追加された部分はクリックしても何も反応しません。
live()の動作
では、liveを使ってみるとどうなるのか?
■liveを使ったclickの場合
$(".live").live('click',function(){ $(this).after('<p class="live">ここもクリックで要素追加</p>'); });
■プレビュー
クリックで要素追加
先ほどのclickのみの時と違って、追加された要素でも
クリックイベントが割り当てられている。
なので、最初の要素だけでなく追加された要素をクリックしても
どんどん追加されるようになっている。
現時点で自分のサンプルとか含めてあまり使うようなことは
ないのかもしれないですが、徐々に使い方になれていこうと思う。
これがあれば使えたなーと思います。私の場合は結構特殊例だとは思いますが、動的に作成したElementにイベントを追加する処理を勝手にやってくれるのは便利な気がします。
ただ、動かしてみたわけじゃないですが、DOM操作イベントを監視してるでしょうからパフォーマンスは大丈夫なのか心配な感じですね。
なるほど、動的に作成したElementにイベントを勝手に追加してくれる機能はやはり便利になるケースというのがあるのですね!
今回追加のliveなどのパフォーマンスはかなりいいような英文がどこかにあったような…すみません、ソースわすれてしまいましたが、これを使うことでかなり速度面とかパフォーマンス部分で有効的なケースがある!というような内容だったはずです。
レスありがとうございました。
イベントの取得を無理やり取得するのに、
さらに内容が膨れ上がる…なんてことなのでしょうね。
このlive()を使うことでかなり楽になることも増えるのでしょう!
使える関数がまだ限られているみたいですし、
他の関数とちょっとだけ使い方が違うのもこの関数をより使いやすくするための工夫なんでしょうね。
コメントありがとうございます!
> DOM操作イベントを監視してるでしょうから
Posted by ハム
> 今回追加のliveなどのパフォーマンスはかなりいいような英文がどこかにあったような…
私もいますぐにソース提示できないので、証拠は各位でお確かめ頂きたいのですが、live の実装は、"イベントバブリング" だと読んだ覚えがあります。
ので、各要素ひとつひとつにイベントハンドラを登録しないため、消費メモリ量が抑えられイベントハンドラ登録処理に時間を取られることもなくなるのでそういう面でのパフォーマンスアップが図れる、ということだと理解しています。
Posted by ハム
> 使える関数がまだ限られているみたいですし
関数...イベントでしょうかね。
live で補足できるイベントが一部のイベントに限られているのは、その実装上、バブリングしないイベントは上位要素で補足できないからだと私は理解しています。
コメントありがとうございます。
個人的にもliveはまだまだ勉強中なので、なにか良い実装事例などがありましたら、是非ご教授いただけたら嬉しいです!
そうですね、良い実装事例かどうかはわかりませんが、例を挙げますと。
当方、ASP.NET Webアプリをよく書くのですが、その際に、UpdatePanel などを使った、AJAX による部分レンダリング(部分更新)などを行っていた場合、まさに DOM 要素が動的に変化するので、こういうケースでの live は大変効果がありました。
開発言語によらず、AJAX 技法を活用して、部分更新を行っているようなケースでは、live が便利なのかも、と思います。
また、パフォーマンスについては、ASP.NET の場合だと、AJAX Control Toolkit という JavaScript を活用したUI関連のライブラリがあるのですが、1ページ中にこれを多用すると、IE6,IE7だとページが表示されてから AJAX Control Toolkit の初期化にずいぶんと時間がかかって数秒間フリーズしたような状態になります。最近のブラウザだと JavaScript の処理が速いので対して問題になりませんが、こういうケースでも jQuery の live をうまく活用できれば状況改善されそう、と感じております。
Webアプリなど、DOMが動的に変化するようなページだと、liveのような動作を軽くするスクリプトは重要になってくるのですね。
今後はWebアプリにかかわらず、さまざまなところで多用される可能性も十分でてきているので、ライブラリを使う場合、今後は読み込み時間とか、そういう面でも気にしていかなければならないですね。
今後はliveもそうですが、いろいろ学ばなければならないなーと、まだまだ感じております。