スポンサーリンク

jQueryのバージョン1.9での変更点・違いのまとめ。IE8対応だが,1.8とはAjax等のAPIが異なり,プラグインが動かない問題が多発。リファレンスは2.0と共通

jQuery 1.9 での変更点のまとめ。


1年以上も前のバージョンである 1.8 との違いが非常に大きいので,
うかつに1.9にアップグレードしないほうがよい。

Ajaxなどの挙動も 1.8 までとは異なるため,
レガシーなWebサイトではそのまま 1.8 を使う事になるだろう。


1.9は, jqueryの「1.x系」なので,IE6〜8に対応している。

しかし昔のIE対応が不要であれば,迷わず 2.x 系を使おう。


jQuery リリースの歴史:

  • 1.7リリース:2011年11月 →こちら
  • 1.8リリース:2012年8月 →こちら
  • 1.9リリース:2013年1月 →今回紹介するバージョンです。
  • 2.0と1.10リリース:2013年5月 →こちら
  • 2.1と1.11リリース:2014年1月 →こちら

1.9のリファレンスやチートシート

1.9のAPIは,それより後のバージョンと共通。

1.8からは大きく変わっているが,1.9から先は大きな変更はない。


なので,1.9のリファレンスとして, 2.0や1.10の資料を流用できる。

jQuery バージョン 1.11 と 2.1 での変更点の一覧と,APIリファレンス。1.10や2.0のリリースと機能は同じで,チートシートも流用可能。IE8対応なら1.11を使う
http://computer-technology.hateblo.jp/entry/20150703/p1

  • 2.0のAPIは1.9と同じ。
  • API的には 1.9= 1.10 = 1.11 = 2.0 = 2.1 なのだ。


jQuery 1.9 日本語リファレンス | js STUDIO
http://js.studio-kingdom.com/jquery

  • 2013.03.13 ver1.9の内容に更新しました。


jQuery 1.10 Reference - API by Function Types
http://server2client.com/jquery1ref/r...

  • 1.10のAPIドキュメンテーション。1.9でも流用可


jQuery Cheatsheet
http://oscarotero.com/jquery/

  • 1.10のチートシート。1.9でも流用可

1.8と1.9では,大きく異なるのでプラグインが動かない問題がある。

jQuery 1.9では,1.8と比べて,かなりAPIが整理された。

以前から廃止する予定だったものを一辺に削除してある。


1.8と1.9は,全く別物と考えたほうが良い。

jQuery 1.9 で変更された仕様によって動かなくなるプラグインが多い | DEVLAB
http://devlab.isao.co.jp/plugins-does...

  • jQuery 1.9系の仕様変更内容を調べてみたら、おっと、今までかなり重宝していたメソッドがなくなっているではありませんか。
    • 将来的に削除されることは知っていたけど、使い勝手が良くて使っていた$.browser()
    • 何気に動的に生成されたDOMオブジェクトに対して適応性が低い$.bind()より汎用的に使えるため重宝していた$.live()などが削除されてしまった
    • そのため、これらのメソッドを使っているjQueryプラグインではエラーが発生してしまう
  • 1.8系までと1.9系以降のjQueryは別物として認識しておいた方が良い


jQuery 1.9のリリース候補版が公開。使用されなくなったAPIを整理し、jQuery 2.0と互換へ − Publickey
http://www.publickey1.jp/blog/13/jque...

  • 1.9では、ほとんど使われなくなった古いAPIを整理。
    • これまでのバージョンアップによって肥大化した内部を, クリーンな構造へと再構築
    • これは次のメジャーバージョンアップであるjQuery 2.0に備えた動き


そのため,1.8までとはAPIが大きく異なり,プラグインが動かなくなる場合がある。

古いプラグインを動かしたい場合は,1.8を使おう。

jQuery Core 1.9 アップグレードガイド 日本語訳 | WWW WATCH
http://hyper-text.org/archives/2013/0...

  • 2013年。jQuery1.9のすごく詳しい変更点まとめ。
  • 1.9 のリリースにあたり、以前のバージョンからあまり使われていなかったり、問題があるとされていた機能が整理されたり、修正されたりしています。
    • このため、1.8 以前から 1.9 にバージョンアップする場合、プラグインや Web サイトの機能に互換性の問題が発生する可能性がある。
    • jQuery 1.9 は、動作に一貫性がなく非効率的だったいくつかの API を削除または修正
    • ここで挙げる変更のほとんどは、jQuery の以前のバージョン、とりわけ 1.7 や 1.8 のころから廃止されることが予示されていた


Re:jquery 1.xと2.x の違い、さらに動作を音速にするための設定 - to-R
http://blog.webcreativepark.net/2014/...

  • jQuery 1.9でごっそりメソッドが削除された
    • ので、jQuery 1.8.3が比較的多くのプラグインがちゃんと動作するバージョンになる


最新版のjqueryを使いつつも,1.8以前の挙動を復活させて
プラグインを動けるようにしたい場合は,
jquery-migrateプラグインを使おう。

jQuery 1.9.0でなくなった機能を補完する「jquery-migrate」-JavaScript Library Archive
http://javascript.webcreativepark.net...

  • jQuery.browserなどは非常によく使われる機能ですので、jQuery 1.9.0だとプラグインが動かないといケースがかなり発生
  • 「jquery-migrate」は,jQuery 1.9.0で廃止になった様々な機能を補完するjQueryプラグイン


以前のバージョンで開発したアプリを最新のjQueryで動作させるには? - Build Insider
http://www.buildinsider.net/web/jquer...

  • もちろん、jQuery 1.9以上を利用する場合には、新しく代替の方法で置き換えるのがあるべき姿です。
    • しかし、Webサイトやアプリの規模が大きくもなれば、手を入れるのもなかなか困難
  • そこで提供されているのが、jQuery Migrateプラグイン
    • これは、まさに移行(Migrate)のためのライブラリで、1.9で削除された機能をリストアします。
    • jQuery Migrateを利用することで、既存のコードに手を入れることなく、jQuery 1.8以前からjQuery 1.9以降への移行が可能になります。

1.9での具体的な変更点

1.9での変更点の一覧まとめ:

jQuery 1.9 に更新する際に注意すべき変更点の自分なりのまとめ | 私的なjQuery
http://myjquery.blog.fc2.com/blog-ent...

  • 「Changes of Note in jQuery 1.9」を読んで、 自分なりにまとめました。
  • 削除された機能について:
    • イベント,ajax, attr, live/die, toggle, data
    • AJAX イベント( .ajaxStart, .ajaxStop, .ajaxSend, .ajaxComplete, .ajaxError, .ajaxSuccess )が, document 要素でのみトリガーされるように変更になりました。
  • 変更された機能について:
    • DOMツリーの操作,イベント発火周り
    • 1.9 からは、$()に渡した文字列の先頭に"<"がある場合のみ HTML 文字列とみなす


ソースマップ対応でデバッグがしやすくなった:

jQuery 1.9 のソースマップ対応で圧縮版でもデバッグが簡単になった話 - てっく煮ブログ
http://tech.nitoyon.com/ja/blog/2013/...

  • 1.9 の新機能の中ではあまり注目されていませんが、ソースマップに対応したのが地味に便利。
    • 開発中には非圧縮の jquery.js を使うことが多かった
    • それが、1.9 からはソースマップに対応したので, 圧縮版(jquery.min.js)のままでのデバッグが簡単になってます。
  • Google Chromeデベロッパーツールでの利用手順。


HTML文字列のパースの挙動が変更。

XSS対策のため。

jQuery 1.9 の $.parseHTML とかその辺 - ほむらちゃほむほむ
http://t-ashula.hateblo.jp/entry/2013...

  • jQuery 1.6.3 から続いていた問題として, jQuery('セレクタだと思ったら要素生成') 問題 への対応に一応の終止符が打たれた。
    • 大抵の場合,大きな問題はなかったのですけども,ユーザ入力からセレクタを組み立てるときに問題になりました.
  • jquery 1.9 で $(String) の条件が変更され,
    • 文字列の先頭が '<' でその後に '>' があれば要素生成,
    • '#' が先頭ならセレクタとなり,
    • class セレクタや属性値のセレクタが要素生成になることはなくなりました.
  • $.parseHTML が生まれてきた背景には $(location.hash) による DOM based XSS の問題への対応という要素があります


重宝していたブラウザ判別メソッドが変更されている。

jQuery 1.9 で $.browser が使えなくなってしまった対策 | CYOKODOG
http://www.cyokodog.net/blog/jquery19...

  • $.browser に頼らないブラウザ判別。
    • jQuery の開発元では $.support による判別を推奨してる。
  • 自分の場合、プラグインを実装する時などは「使いたい機能が機能するか」で判定し処理を振り分ける
  • スマフォの普及もありデバイスが多様化してるので、極力 userAgent に依存した判定は避けたいなぁと思ってます。


jQuery 1.9 で変わったところを調べてみる。 | バシャログ。
http://bashalog.c-brains.jp/13/01/21-...

  • jQuery.browser() の廃止.
    • だいぶ前からなくなるよ、と言われていましたが、とうとう廃止に。
    • jQuery.supportや、Modernizrなどを使うことが推奨されています。


live(), die() がなくなり,on(), off() へ完全に移行。

jQuery 1.9以降で「has no method 'live'」と出たら、 $(document).onを使う - Qiita
http://qiita.com/seltzer/items/e60c44...

  • 的に生成された要素にイベントを割り当てられる「.live」メソッドは、jQuery 1.9からなくなった
  • 代わりに使うのが「$(document).on」というメソッド。


jQuery 1.9に移行してハマったこと - ログろいど
http://logroid.blogspot.jp/2013/01/jq...

  • .live()は.on()に、.die()は.off()にそれぞれ置き換えられている。


toggle() も変更されている。

jQuery1.9の変更点 | Mtok-blog
http://www.matzmtok.com/blog/?p=711

  • Mouse Eventで定義されていた.toggle()メソッドが削除されました。
    • 要素のvisibilityを変化させる.toggle()メソッドと紛らわしいというのが理由らしい。


1.9での属性操作の挙動も要注意。

attr() や prop() の挙動が変わっている。

これが影響を及ぼすのは,チェックボックスのchecked属性を操作するようなとき。

jQueryのpropとattrの違いと使い分け - instant tools
http://tools.m-bsys.com/ex/attr-prop.php

  • HTMLの属性をJavaScriptで操作することと,Elementオブジェクトのプロパティを操作することは明確に違います。
    • attr()はもともと、属性とプロパティの両方を扱おうとしたため仕様に無理がありました
  • そこで 1.6.0で属性とプロパティの扱いを分離し、属性はattr()で、プロパティはprop()で扱おうとしました。
    • prop()はプロパティだけを扱うよう新しく設けられた
    • ですが、 attr()は過去のバージョンとの互換性を保とうとしたため段階的仕様変更を行った
    • 特に1.6.0〜1.8.3までは移行段階として、attr()なのにプロパティの操作も行う中途半端な仕様にしていた


jQuery 2.1.1 で attr() を使って checked を操作するときの動き - instant tools
http://tools.m-bsys.com/ex/attr.php?v...

  • 1.6.0からprop()が新設され、属性の操作とプロパティの操作を分離しようとする意思は汲み取れます。
    • バージョンが新しくなるにつれ、プロパティの操作から属性操作の方向に 向かおうとしているように見えます。
  • 特に1.9.0以降はプロパティの操作を完全に止めたため、チェックの操作ができなくなったようです。
  • attr()を使用する際にはバージョンによって動きがかなり異なるということを意識するように


jQuery 2.1.1 で prop() を使って checked を操作するときの動き - instant tools
http://tools.m-bsys.com/ex/prop.php?v...

  • 1.6.1〜1.8.3は、prop()でチェックを入れたあとに「attr("checked")」を実行すると (本当は属性値は変わっていないのに)、「checked」が返ります。
    • しかしこの点はattr()の仕様の問題ですので、prop()自体は仕様が変わっていない