jQuery1.4.2リリース
jQuery: » jQuery 1.4.2 Released
気づけばjQueryのバージョンが新しくなって、1.4.2がリリースされていました。
今回も主な変更はバグの修正と速度改善のようですが、機能も追加されているようです。
jQuery 1.4.2
今回の改善内容は、バグの修正をいくつかと、プラス速度改善。マイナーバージョンアップでも速度改善されているのですねー。
速度改善が主にされているのが、以下の4種類。
- .bind()と.unbind().
- .empty()と.remove()と.html()
- documentへのDOMノード挿入
- $("body")
上記の利用速度が速くなっているようです。
.delegate()と.undelegate()
今回の追加は.delegate()と.undelegate()の二つ。
.delegate()は下記のような使い方のようです。
■.delegate()
$("#demo1").delegate("p", "click", function(){
$(this).after("<p>ここもクリックで追加できるよ!</p>");
});
■デモ
クリックで追加できるよ!
.live()と同様の動作をする様子。しかし、個人的にはよく使い方の違いがわかっていない。書き方が違うというのは理解できるのですが、使い方の違いとなると、ちょっとまだ疑問系状態。
.live()と.delegate()の違い?
例えば、「.delegate() - jQuery API」で紹介されているような下記のような場合は、ちょっとした違いがあるなーってのはわかる。
$("table").each(function(){
$("td", this).live("hover", function(){
$(this).toggleClass("hover");
});
});
これと同じなのが下記コードとのこと。
$("table").delegate("td", "hover", function(){
$(this).toggleClass("hover");
});
.each()で全体にループを書けるかそうじゃないかの違いくらいにしか見えないような・・・?
しかし、例えば下記のように書いた場合は、余計に違いがわからなくなってしまうような・・・
$("#test2").delegate("li", "click",function(){
$(this).after("<li>ここもクリックで追加できるよ!</li>");
});
■デモ
- ここクリックで追加可能1
- ここクリックで追加可能2
- ここクリックで追加可能3
これを.live()でやろうと思ったら、下記のコードでいいんじゃ?
$("li","#test3").live('click',function(){
$(this).after("<li>ここもクリックで追加できるよ!</li>");
});
■デモ
- ここクリックで追加可能1
- ここクリックで追加可能2
- ここクリックで追加可能3
全部にループさせなくてもこれなら同じように使える。
・・・となると、二つの明確な違いって何だろう?
もう少しいろいろ調べてみないと。
.live( ..(2)
だとhoge内の全てのfugaを(1)のタイミングで取得しに行く必要がありますが、
$('hoge') ..(1)
.delegate('fuga' ..(2)
ならば(1)のタイミングで必要なのはhogeの取得のみ
(2)のタイミングではfuga要素には直接イベントを貼らず、先祖要素(live は document(だったかな?)で、delegateはたんぶんhoge)にイベントを貼って、event.target を起点にfugaが処理対象になったかを判断してるのではないでしょうか
業務系だと大量のtable上のデータをin-place-editorで直接編集なんてのもあるので、初期化にコストがかからず便利な気がします