jQuery の data() 等のダッシュ(-)を含むキーの取り扱いの違い

jQuery.data()jQuery.fn.data()を 使うと要素(やオブジェクト)ごとに Key-Value の形でデータを 保存することが出来ます。 また、jQuery.fn.data()では HTML 属性 data-* の値を取得することができます。 この属性 data-* まわりの処理のためか、 キーにダッシュ(-)が含まれている場合、 処理に一貫性が無くなり、1.x 系と 2.x 系で振る舞いが 異なる箇所も出てきます。

そのようなわけで、キーにダッシュが含まれている場合に どのような振る舞いになるのかを調べてみましたが、 キーにダッシュを含めなければいい話なので、 元々キーにダッシュを含めていない人は もうこれ以降読む必要が無いかもしれません。

主に jQuery 2.1.0 と 1.11.0 (あとおざなりに 2.0.3, 1.10.2, 1.9.1) を使って調べたので、他のバージョンでは 当てはまらないことがあるかもしれませんのでご注意下さい。

jQuery 1.11.0 と 2.1.0 での変更箇所の自分なりのまとめ

jQuery 1.11.0 と 2.1.0 がリリース されたので、自分なりに変更点をまとめました。 誤訳や誤解して間違ってまとめていることもあるかも知れませんので 読まれる際はご注意下さい。 以前の記事( beta1 , beta2 , beta3 , rc1 )の要約みたいなものです。 (※ページをそのまま訳したわけではありません)
箇条書きにすると以下のような感じ:

jQuery 1.11 と 2.1 の rc1 の変更箇所のメモ

1週間ほど前 jQuery 1.11 と 2.1 のRC版1が発表 されましたのでベータ版3との違いをメモしておきます。

API は 1.10 や 2.0 から変更してません。

npm に登録されている ので、 node 等で jQuery を利用したい場合は npm install jquery@2.1.0-rc1などで インストールできます。

ただし CommonJS 環境下(module や module.exports が存在する) では、グローバルに document オブジェクトが存在していても、 require("jquery")を実行しただけでは jQuery 本体がグローバルに自動的に expose されないので、例えば window.jQuery = window.$ = require("jquery") と手動で expose する必要があります。 グローバルに document オブジェクトが存在していない場合は jQuery 本体を作成するファクトリ関数が返ります。 document オブジェクトを持つ window オブジェクトを ファクトリ関数に渡すと jQuery 本体を取得できます。 (この場合は window オブジェクトに jQuery 本体が自動でexpose されます)。

QUnit.reset()が deprecated になり削除予定なので テストでQUnit.reset()の使用箇所を他の表現に 置き換えたそうです。

古い IE の XHR は RFC2616 に無いメソッド(PATCH とか、 あと trace とconnect も)サポートしてないそうで、 それらを行う場合は ActiveXObject を使用するようにしたようです。

jQuery 1.11 と 2.1 のベータ版 3 の変更箇所のメモ

1週間ほど前 jQuery 1.11 と 2.1 のベータ版3が発表 されましたのでメモしておきます。まだベータ版です。

API は 1.10 や 2.0 から変更してません。 ベータ2に引き続き AMD 対応を進めています。

ベータ2からさらに IE 関連のバグが修正されています。 sizzle も新しくなりました。 npm での使用に改良を加えています。

ベータ2に引き続き npm に登録されるので、 node 等で jQuery を利用したい場合は npm install jquery@2.1.0-beta3で インストールできます。

ただし、ベータ3ではまだ適用されていませんが、 将来の npm 版の jQuery では、 require("jquery")したときに jQuery がグローバル(window オブジェクト)に自動的に expose されなくなるそうなので、例えば window.jQuery = window.$ = require("jquery") と手動で expose する必要があります。

カスタムビルドでモジュール exports/global が追加されました。 また、AMD で使用する際の jQuery のモジュール名を 設定することができるようになりました (デフォルトは"jquery")。 使用する機会はほぼ無いと感じます。 (例:grunt custom --amd="custom-name")

package.json に main プロパティを設定して npm 版の jQuery を require('jquery')で使用できるようになったようです。 (これまでは require('jquery/dist/jquery')等とする必要が あったらしい。)

IE でのローカルファイルへのアクセスに関しては 2.x 系ではなく 1.x 系を利用した方が良さそうです ( 参考 )

あと THE NIGHT BEFORE CHRISTMAS のパロディが書いてありました。 英語ネイティブな人ならうまいのか寒いのか分かるのでしょうが、 コメントを見る限り好評な模様です。