ライブイベント

jQuery 1.3ではlive event(ライブイベント)という仕組みが新たに導入された。これはセレクタで選択した要素にイベントリスナを登録するだけでなく、同じセレクタにマッチする、将来ドキュメントに追加される要素にも自動的に登録するというものだ。

以下のコードを見てほしい。

$(document).ready(function(){
  $('p').live('click', function(){
    $(this).after('<p>追加されたパラグラフ</p>');
  });
});

このコードはp要素に対してイベントリスナを登録している。通常のイベントリスナと異なるのは、すでにドキュメント上に存在する要素だけではなく、将来このドキュメントに追加されるp要素にも自動的にイベントリスナが登録されるという点だ(上記の例では追加されたパラグラフにも自動的にイベントリスナが登録される)。die()メソッドでライブイベントを削除することも可能だ。

ライブイベントを活用することでイベントリスナの登録を簡潔に記述できるようになるだろう。

ブラウザ間の差異の吸収

JavaScriptプログラミングではブラウザ毎の挙動の違い、サポートしている機能の有無が問題となることが多い。

ブラウザ間の動作の違いを吸収するためにユーザエージェントなどからブラウザの種類やバージョンを判定して回避コードを記述するというテクニックが用いられることが多いが、これは将来にわたって特定のブラウザ、バージョンにバグが存在し続けるという前提に基づいている。たとえばブラウザのマイナーバージョンアップにバグフィックスが行われたりするとこれらの回避コードは動作しなくなってしまうだろう。

jQuery 1.3ではブラウザが各種機能をサポートしているかどうかの判定処理をカプセル化したjQuery.supportオブジェクトが導入されており、ユーザコードでブラウザの判定を行うのではなく、このオブジェクトを用いて判定を行うことが推奨されている。以下にjQuery.supportの使用例を示す。

if(jQuery.support.boxModel){
  ...
}

なお、これまでブラウザを判定するために提供されていたjQuery.browserオブジェクトも残されている。これは多くの既存コードやプラグインでブラウザ判定のために使用されていることに配慮したものだ。

また、ブラウザごとの違いといえばイベント処理に関する差異も大きな問題として挙げられる。とりわけ高度なイベント処理を可能とするW3C DOMのイベントモデルをIEがサポートしていないということが問題をより大きなものとしている(IEはW3C DOMのイベントモデルに似たイベントモデルを備えているが、独自のAPIとなっている)。

jQueryでは以前からイベントモデルの差異を吸収するための機能を提供していたが、1.3ではイベントシステムが大きくリファクタリングされ、ブラウザ間の差異を吸収するためのコードがjQuery.Eventオブジェクトにカプセル化されている。

これらの新機能・変更によってクロスブラウザ対応のJavaScriptコードをより簡潔かつ安全に記述できるようになるはずだ。