jQuery 1.9 で変更された仕様によって動かなくなるプラグインが多い

code { padding: 2px; background-color: #f4f4f4; color: #7f0055; font-weight: bold; border: solid 1px #ddd; } blockquote { margin-left: 1em; font-size: 12px; line-height: 17px; background-color: #fdfdfd; border: solid 1px #ccc; padding: 4px; font-style: normal; }

現在開発しているあるシステムで、最新のjQuery 1.9.1を導入して開発を行っていたところ、先月開発していたシステムでは動いていて、同じように実装したはずなのに動かないjQueryプラグインがあってハマりました。それがWordPressのコアに同梱されている「thickbox」でして、管理パネルでは動いて、テーマ側で動かないのは何故だろうと思って調べてみたところ、読み込んでいるコアのjQueryが1.8系と1.9系と差があった。もしや・・・と思って、jQuery 1.9系の仕様変更内容を調べてみたら、おっと、今までかなり重宝していたメソッドがなくなっているではありませんか。
将来的に削除されることは知っていたけど、使い勝手が良くて使っていた$.browser()と、何気に動的に生成されたDOMオブジェクトに対して適応性が低い$.bind()より汎用的に使えるため重宝していた$.live()などが削除されてしまったため、これらのメソッドを使っているjQueryプラグインではエラーが発生してしまうようになってしまいました。
・・・と言うことで、jQuery 1.9系での主な仕様変更をまとめてみた。

  1. $.browser()が廃止1.3からサポート外に指定されてましたが、ついにメソッドが削除されてしまった・・・何気にお手軽にブラウザ判定できるので使い勝手良かったんだが・・・致し方ないですね。これからは、$.support()を使って判定式を組まないといかんです。

  2. $.live()が廃止

    $.bind()の拡張版メソッドで、bindはjQueryやJavaScriptで動的に生成されたオブジェクトに対して処理をバインドできなかったのを可能にするメソッド。これも使い勝手が良くて重宝していたのだが・・・廃止されてしまった。今後は$.on()$.off()を使えってことです。まぁ、バインドイベントのオン・オフを判り易く制御できるのでこちらの方が確かにスマートだ。

  3. $.die()が廃止

    上記live関数を削除するメソッドです。liveがなければこちらも不要ということですね。

  4. $.sub()が廃止

    プロパティとメソッドが自由に変更可能なコアjQueryオブジェクトのコピーを作成するメソッドです。プラグイン開発などで、コアを変更せずに、独自にjQueryコアを拡張する時などに使われていましたが、結構巨大なjQueryコア自体をコピーしてメモリ食いまくってまで作るプラグインもないだろう・・・という判断があったのかも。まぁ、プラグイン開発者以外にはあまり使わないメソッドだし、1.8系からこのメソッド自体がプラグイン化されたらしいので、廃止によるインパクトは低いかな。

  5. $.toggle(fn1(),fn2(),[...fnN()])の廃止

    1.7系で非推奨化されてたメソッドです。指定のオブジェクトがクリックされる毎にfn1、fn2、・・・fnNと関数を実行して、fnN以降はfn1に戻るみたいな処理が書けるメソッドでした。まぁ、クリック毎にそこまで処理変えなきゃいかんUIってどうよ?って感じなので、廃止は妥当かな・・・と。あ、ちなみに、関数バインド型ではないイベントエフェクト型の$.toggle()は廃止されていません。

  6. 他に記述順や処理内容が変更されたメソッド

    $.add()$.before()$.after()$.addSelf()などなど細かいところが色々と変わっているようです。

※ 詳しくは、本家のjQuery Core 1.9 Upgrade Guideをご参照ください。

2013年2月12日現在、jQueryの最新版は1.9.1なのだが、既存のjQueryプラグインやライブラリを利用する場合は1.8系までのバージョンにしておかないと、そのままでは動かないものが多く出て来ることが予想される。1.8系までと1.9系以降のjQueryは別物として認識しておいた方が良いかもしれない。