THE HAM MEDIA BLOG

jQuery1.4.2リリース

Clip to Evernote このエントリーをはてなブックマークに追加
カテゴリ:
jQuery
タグ:
jquery

jQuery1.4.2リリース

気づけば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

全部にループさせなくてもこれなら同じように使える。

・・・となると、二つの明確な違いって何だろう?

もう少しいろいろ調べてみないと。

この記事へのコメント
$('fuga','hoge') ..(1)
.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で直接編集なんてのもあるので、初期化にコストがかからず便利な気がします
Posted by cyokodog at 2010年04月01日
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

トップに戻る