Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。3.1.0例外ハンドラの追加まとめ参考資料セレクタセレクタについては、破壊的な変更が2つ、機能追加が1つ、非推奨機能が1つになっています。ここでは、破壊的な変更について解説しましょう。要素を選択するフィルタの挙動が変更になりました。JavaScriptのgetClientRectメソッドで要素が返された場合、その要素の高さ、幅ともに0であっても、visibleという判断になります。3では、visibleの扱いになります。style="width:0;height:0;"></div>#のみのセレクタは文法エラーに「#」のみのセレクタは、不正なセレクタとなり文法エラーとなりました。従来は、$("#")とすると、空のコレクションを返していました。その他の変更についてAttributes、Data、Effectsの変更点については、破壊的な変更についてのみ解説します。従来は、checked、selected、readonlyといった属性(attribute)を持つ要素に対して、$.removeAttrメソッドを利用すると、属性をプロパティとみなしてfalseを指定していました。3では、属性自体を削除するようになりましたので、プロパティを変更するには、$.propメソッドを使うようにします。3からは空の配列を返すようになりました。3では、要素に関連づけたdataの名前は、キャメルケース(たとえばclickCount)で保持されます。ハイフンでつないだケバブケース(click-Count)の名前でも動作しますが、内部的にはキャメルケースになっています。$.show、$.hide、$.toggleメソッドの内部処理変更これらのメソッドは、内部の処理が変更されて、スタイルシートのdisplayの値を優先するようになりました。これにより、スタイルシートを動的に変更するレスポンシブデザインとの互換性が上がりました。3.1.0が公開されました。このリリースでは、Deferred処理を改善し、エラー発生時に通知されない場合がある問題が修正されました。3.0では、DeferredオブジェクトがPromises/A+仕様に準拠し、前述したように、処理がreject(異常終了)した場合には、Promiseオブジェクトの状態で通知するようになりました。オブジェクトがブロックされることはありません。その一方で、処理が失敗した場合のハンドラをcatchメソッドで記述しなければ、例外を補足できないようになっています。3から、$.readyも、Promises/A+仕様に準拠したDeferredオブジェクトを使うようになっています。ところが、よく使われる$(fn)や$(document).ready(fn)という形式では、戻り値がjQueryオブジェクトのため、catchメソッドを使うことができません。多くの場合で、$.ready内でエラーが発生しても、そのことを知る術がない状態になっていたのです。3.1.0では、$.ready内で発生したエラーを補足するハンドラが追加されました。このハンドラは、$.ready内に発生したエラーをすべて補足し、デフォルトで、$.ready内のスクリプトの実行を停止してコンソールにログを表示します。コンソールへの表示の変更など、より細かい制御をしたい場合には、$.readyExceptionメソッドをオーバーライドすることで、エラー時の処理を定義することができます。alert(error);};コンソールでの出力例まとめ今回は、Ajax、Deferred機能などを中心に変更点を紹介しました。Guideを参照してください。