
jQuery1.8がリリースされました。
上記のブログに、jQuery1.8の変更点についての概要が記載されていたので、例によってざっくりと訳してみました。ベンダープレフィックスの自動付加やアニメーション関係のアップデートは便利そうですね。処理速度の向上やファイルサイズの縮小も助かります。
jQuery1.8のクイックツアー
Sizzle(※)の再構築:
- jQueryのセレクタエンジンをリライトしてかつて無いほどに早くなった
- もちろんクロスブラウザ。
:has()
関数や:contains()
関数も使えるのでquerySelectorAll
より便利。- IE6/7もまだサポートしてる。
- ※:
- jQueryのセレクタエンジンのこと?
アニメーションの再創造:
- jQueryのアニメーション関係のグダグダだったコードのバグやらなんやらを解消した。
- 見えない所を変更したので、既存のアニメーションは今まで通りに動くはず(というか、今までより早くなるはず)。
- さらに今回のバージョンでは、アニメーションの汎用性や拡張性に関するすんごい機能追加がいくつかある。
- ドキュメントは現在整備中。ドキュメントのドラフトはこちら。
- 新しいコードの動作サンプルはこちら。
CSSベンダープレフィックスの自動付加:
.css()
関数や.animate()
関数でCSSのプロパティを操作する時、ブラウザに応じたベンダープレフィックスを自動的に追加する。- 例えば
.css("user-select", "none");
と記述した場合、ChromeやSafariなら"-webkit-user-select"
を、Firefoxなら"-moz-user-select"
、IE10なら"-ms-user-select"
を付加する。$(html, props)がよりフレキシブルに:
- これまでは
$(html, props)
に渡されたオブジェクトに対して使えるメソッドは限られていた。使えるメソッドの数を増やす正式な方法もなかった。- jQuery1.8からはどんなメソッドやプラグインでも使えるようになった。
- HTMLの属性と同じ名前を持つプラグインなどが出てくるようになると、意図しない挙動をするようになるかもしれないので注意。
160以上のバグが解消:
- Sizzleやアニメーション、CSSのポジション関係などかなりのバグを解消。
- IE6/7/8とその他モダンブラウザとの間のムカツク差異を解消するための改善も引き続きやってるので安心。
コードサイズの縮小:
- コードのクリーンナップ、新機能追加、バグフィクスなどした上で、gzip化したjQuery1.8のサイズはjQuery1.7.2より数百バイトも軽くなった。
モジュール性:
- gruntをベースにしたビルドシステムによって、jQueryの不必要なパーツを取り除いて使うことも可能。
- jQuery1.8時点ではまだまださわり程度だけど、今後のバージョンではもっとフレキシブルにする予定。
削除されたもの
- 今回の変更で削除されたものはほんのわずか。
- jQuery1.9で削除される予定への対応にユーザーが充分な時間を持てるようにした。
$(data).data("events"):
- jQuery1.6でドキュメントから外れた機能。1.6以降も機能としては残っていたが、1.8で廃止。
- 一応、デバッグ用途に
$._data(element, "events")
でアクセスすることはできる。Deferred.isResolved()とDeferred.isRejected():
- jQuery1.7から導入された
Deferred.state()
関数があるので、これら2つの関数は廃止。$(element).closest(Array)がArrayを返す仕様:
- かつて
.live()
関数と併せて使うことを想定して実装されていた、.closest()メソッドの変な実装。- jQueryオブジェクトを返すような
.closest()
の通常の使い方には一切影響なし。$.curCSS:
- jQuery1.3から続いていた
jQuery.css()
のエイリアス。- ドキュメントに記載されたことは無かったものの、一部のライブラリなどで使われたりしていた。
- 今回で廃止。
$.attrFn:
- これもドキュメント化されたことのなかった機能。
- jQuery1.8では、既存のコードがエラーを投げることのないように、
$.attrFn
というメソッド自体は残している。ただし、内容は空なので、何も機能しない。- jQuery1.9からは完全に削除されるので注意。
jquery2.0からはIE6だけでなくIE7/8も切るという話ですが、その頃にはWEB制作時の一般的なポリシーとして、本当にIE6/7/8を切って当たり前、という状態になってればいいんですが…。