(最も人気のあるライブラリの著者からのこのストーリーの翻訳は、この段階でDOM解析で解決される問題を考慮して、ブラウザテクトニクスの脈動を把握したい人にとって非常に有益です。)前回のメジャーリリース以降、多くの水が流れており、間違いなく更新に値します。 したがって、jQueryの最初のアルファバージョンのリリースを発表できることを嬉しく思います。
バージョン番号3.0にもかかわらず、このリリースではコードのアップグレードに大きな問題は発生しないと思われます。 はい、いくつかの重要な変更がありますが、それは上位バージョンのインデックスの変更によって正当化されますが、これらの変更が多くに影響を及ぼさないことを願っています。
jQuery Migrateプラグインは、コードの互換性の問題を特定するのに役立ちます。 また、このアルファに関するあなたの意見は私たちに大いに役立つので、既存のコードとプラグインで試してみてください!
最初のリリースである
jQuery 3.0は、新しいブラウザーとIE 9+でサポートされています。 2番目の
jQuery Compat 3.0は、IE 8+でサポートされています。 ボーナスとして、両方のリリースは2012年にリリースされたYandexブラウザーでサポートされます。
jQuery CDNまたは直接リンクからファイルを取得できます。
code.jquery.com/jquery-3.0.0-alpha1.jscode.jquery.com/jquery-compat-3.0.0-alpha1.jsnpmからインストールできます:
npm install jquery@3.0.0-alpha1
npm install jquery-compat@3.0.0-alpha1
大きな変更
ここでは、主要な新機能、変更、および修正についてのみ説明します。 変更の完全なリストを以下に示し、
GitHubアカウントで簡単に追跡でき
ます 。 さらに、GitHubでは、まだ実装されていない機能を確認できます。これらの機能は、後のベータ版および最終版で計画されています。
簡略化された.show()および.hide()メソッド
jQueryの.hide()のポイントは、CSSで 'display:none'プロパティを設定することです。 したがって、.show()は画面を更新し、アイテムが再び表示されるようにします(ただし、親が非表示になっていない場合)。 簡単ですね。
さて、すべてではありません。 実際、長年にわたって人々が「修正」するように私たちに求めてきた多くの困難な特別なケースがありますが、それは原則が絡み合っていることが判明しました。 たとえば、アイテムが
表示するように設定されていない場合はどうでしょうか
:スタイルシートに
noneがありますか? jQueryは、要素に対して
display:ブロックを強制することにより、それを決定しようとします。 わかりましたが、デフォルトのブロック<li>要素が
表示するように設定されていた場合はどうなりますか? エレメントがドキュメントに追加される前にこれらのメソッドをエレメントで呼び出すと、どのような値が表示されるかわかりません。 このすべてを定義すると、追加の作業が作成されます。 仮定に依拠することもありますが、結果はそうではありません。
これらのメソッドは要素にスタイル属性を追加するため、要素の可視性がメディアクエリに依存するレスポンシブデザインなどの手法ではうまく機能しません。 これには、
orientationchangeまたは
サイズ変更イベントをリッスンして、ページの一部を手動で非表示または表示するjQueryハンドラーが必要です。 これにより、メディアクエリを通じて行われた決定の優雅さが失われます。
jQueryがすべての人の狂気の中間であり、このような旅を終わらせる意味がないことがわかります。 特殊なケースとチェックは複雑で不完全なだけでなく、大きなページで重大なパフォーマンスの問題を引き起こす可能性があります。
代わりに、これらのメソッドの進化を実験的に無視し、単純な初期モデルに戻ります。 これはいくつかのコードを壊します。 スタイルに
display:noneの要素がある場合、
.show()メソッドはこのプロパティをオーバーライドしません。 したがって、jQuery 3.0に移行するための最も重要なルールは次のとおりです。
スタイルシートを使用してデフォルトの表示を設定しない:none 、次に.show() -または要素を表示する別のメソッド
-.slideDown()または
.fadeIn() -それを見えるようにします。
デフォルトで非表示になる要素が必要な場合は、「hidden」タイプのクラス名を要素に追加し、クラスが
表示されることを決定することをお勧めし
ます:スタイルにはあり
ません 。 その後、jQueryの
.addClass()および
.removeClass()メソッドを使用してこのクラスを追加または削除し、可視性を制御できます。 または、ページに表示される前に、要素に対して
.hide()を呼び出す
.ready()ハンドラーを
使用できます。 または、本当にデフォルトのスタイルを維持する必要がある場合は、
.css( "display"、 "block") (または別の
表示値)を使用してスタイルをオーバーライドできます。
これはjQuery 3.0で最も物議を醸す複雑な変更の1つである可能性が高いことを知っているため、できるだけ早くリリースして効果を確認したいと考えました。 コードに与える影響と、この新しいモデルを使用するために変更する必要があるものをお知らせください。
github.com/jquery/jquery/issues/1767github.com/jquery/jquery/issues/2057github.com/jquery/jquery/issues/2308.data()に名前がある特殊なケース
.data()の実装を更新して
、HTML5データ仕様に準拠するようにしまし
た 。 アクセス方法に関係なく、すべてのキーはkebab-caseからcamelCaseに変換され、数字は変換に関与しなくなります。 たとえば、「foo-bar」と「fooBar」は区別しませんが、「foo-42」と「foo42」は区別します。 これらの変更は、引数なしで.data()呼び出しを使用してすべてのデータを取得する場合、または元の.data( "foo-42")の代わりに変換された.dataキー( "foo42")を使用してデータにアクセスしようとする場合に主に役割を果たします。
github.com/jquery/jquery/issues/1751jQuery.DeferredはPromises / A +と互換性があります
JQuery.Deferredオブジェクトは、Promises / A +およびES2015 Promisesとの互換性のために更新されており
、Promises / A + Compliance Test Suiteによって検証
されています。 これは、
.catch()メソッドと
.then()メソッドへのいくつかの主要な変更の導入を意味します。
- .then()コールバックの例外は、失敗の値を公開するようになりました。 以前は、コールバックが中断され、Deferredオブジェクト(親と子孫)の両方が不可逆的にブロックされるまで、例外はすべてを見逃していました。
- Deferredの許可状態は.then()メソッドによって作成され、コールバックによって制御されるようになりました-例外は偏差の値であり、非thenableリターンは完全に終了する値になりました。 偏差ハンドラーからの以前のリターンは偏差値になりました。
- コールバックは常に非同期的に呼び出されます。 以前は、最後に来たものに応じて、リンクまたは解決の直後に呼び出すことができました。
- プログレスコールバックは、アタッチされたDeferredオブジェクトを解決できなくなりました。
遅延親が拒否し、子コールバックが例外をスローする次のコードを検討してください。
var parent = jQuery.Deferred(); var child = parent.then( null, function() { return "bar"; }); var callback = function( state ) { return function( value ) { console.log( state, value ); throw new Error( "baz" ); }; }; var grandchildren = [ child.then( callback( "fulfilled" ), callback( "rejected" ) ), child.then( callback( "fulfilled" ), callback( "rejected" ) ) ]; parent.reject( "foo" ); console.log( "parent resolved" );
jQuery 3.0では、これはコールバックを呼び出す前に「解決済みの親」を生成し、各コールバックの子は「充実したバー」を生成し、孫は「baz」エラーで拒否されます。 以前のバージョンでは、「拒否されたバー」(実行ではなく遅延子が拒否されました)が一度発行され、その後、キャッチされないエラー「baz」により実行が停止しました(「親が解決されました」は表示されず、孫は満たされないままです)。
キャッチされた例外はブラウザでのデバッグの利点でしたが、これは失敗時にコールバックを処理するはるかに宣言的な(つまり明示的な)方法です。 Promiseを使用する場合は、少なくとも1つのコールバックを常に追加する必要があることに注意してください。 そうしないと、エラーは見過ごされます。
.then()を廃止された
.pipe()メソッド(同じシグネチャを持つ
)に置き換えることで、古い動作を復元できます。
jQuery.whenも更新され、ネイティブプロミスを含むすべてのthenableオブジェクトを受け入れるようになりました。
github.com/jquery/jquery/issues/1722github.com/jquery/jquery/issues/2102jQuery.ajaxのDeferredメソッドの特別な状態を削除しました
jqXHRオブジェクトはPromiseですが、.abort()などの追加メソッドがあるため、リクエストが行われた後に停止できます。
AJAXのような非同期作業用にPromiseテンプレートを選択するユーザーが増えているため、jQuery.ajaxからPromiseの特別な状態を返すというアイデアはあまりよくありません。
成功、エラー、完了
完了、失敗、常に
これは、存在し続けて非推奨ではない同じ名前のすべてのコールバックには影響しないことに注意してください。 これはpromiseメソッドにのみ影響します!
github.com/jquery/jquery/issues/2084エラーのケースを無視しないでください
おそらく、深い推論で、「ウィンドウシフトとは何ですか?」という質問をしたのでしょう。それから、これはおかしな質問であることがわかったでしょう。
以前は、jQueryはエラーをスローするのではなく、そのような場合に意味のあるものを返そうとすることがありました。 この場合、ウィンドウオフセットを要求すると、応答は{top:0、left:0}でした。 このjQuery 3.0アルファでは、意味のないクエリを無視しないように、このような場合にエラーをスローするというアイデアを実験します。 alphaを試して、jQueryに依存するコードが間違ったコードで問題を隠しているかどうかを確認してください。
github.com/jquery/jquery/issues/1784.width()、. height()、. css( "width")、および.css( "height")は小数値を返し始めました(ブラウザーで許可されている場合)
JQueryは以前、丸められた幅と高さの値を返していました。 IEやFirefoxなど、一部のブラウザーはサブピクセル値を返しますが、ユーザーはこの精度を必要とする場合があります。 この変更がコードに大きな影響を与えるとは考えていませんが、発生した場合はお知らせください。
github.com/jquery/jquery/issues/1724廃止されたイベントエイリアスを削除
.load 、
.unload 、および
.errorは、jQuery 1.8以降では非推奨です。 .on()を使用してハンドラーを登録します。
github.com/jquery/jquery/issues/2286jQuery.swap、jQuery.buildFragment、jQuery.domManipは使用できなくなりました
これらのメソッドは常に内部使用専用であり、文書化されていません。 混乱を避けるため、最終的にそれらを非公開にしました。
github.com/jquery/jquery/issues/2224github.com/jquery/jquery/issues/2225アニメーションはrequestAnimationFrameを使用するようになりました
IE8-9に加えて
requestAnimationFrame APIをサポートするプラットフォームでは、jQueryはアニメーション化するときにこのAPIを使用するようになりました。 これにより、アニメーションがよりスムーズになり、CPU時間の使用が少なくなり、モバイルデバイスのバッテリーを節約できます。
jQueryは数年前に
requestAnimationFrameを実装しようとし
ましたが 、既存のコードとの
重大な互換性の問題がありました。 ブラウザのタブを閉じたときにアニメーションを一時停止することで、これらの問題のほとんどを解決したと考えています。 ただし、ほぼリアルタイムで実行されるアニメーション依存コードは、この仮定を不正確にします。
.unwrap(セレクター)
jQuery 3.0より前では、.unwrap()メソッドは引数を取りませんでした。
セレクター引数は、削除するラッパーを示します。
github.com/jquery/jquery/issues/1744一部のネイティブjQueryセレクターの大幅な高速化
GoogleでのPaul Irishの研究のおかげで、
:visibleのようなセレクターがドキュメントで何度も使用されている場合、大量の余分な作業を見逃している可能性があるケースを特定しました。 これにより、速度が最大17倍向上する場合があります。
この改善を行っても、
:visibleや
:hiddenなどのセレクターは、要素がページに表示されるかどうかをブラウザーに依存するため、高価になる可能性があることに注意してください。 これには、最悪の場合、CSSとページレイアウトの完全な再計算が必要になる場合があります。 それらの使用を妨げることなく、パフォーマンスのためにそのようなセレクターでページをチェックすることをお勧めします。
github.com/jquery/jquery/issues/2042謝辞
このリリースのテスト、バグの報告、または名前を含むパッチの提供に参加してくださった皆さんに感謝します。
クリス・アンタキ、ジェイソン・ベダード、レオナルド・ブラガ、バスティアン・ブッフホルツ、その他10名の姓クリス・アンタキ、ジェイソン・ベダード、レオナルド・ブラガ、バスティアン・ブッフホルツ、アン・ゲール・コロン、デヴィッド・コルバチョ、ブレナード・キューバキューブ、ハミッシュ・ディクソン、ベン・エデルマン、スティーブン・エドガー、elas7、flexphperia、コーリー・フランジ、シュエ・フチャオ、オレグ・ガイダレンコ、リチャード・ギブソン、ミカウ・ゴー、スコット・ゴンサレス、グーブ、ヴェーセスラフ・グリマルスキ、ムー・ハイバオ、ダン・ハート、フレデリック・ヘンバーガー、ニコラス・ヘンリー、ダニエル・ハーマン、ジョン・ヘスター、ビクター・ホミヤコフ、ウィンストン・ハウズ、ダニエル・フサー、エサム・アル・ジュボリ、ヴェレス・ラホス、ジョージ・マウアー、リチャード・マクダニエル、アミット商人、カルバン・メトカーフ、デイブ・メスビン、マイティブランチ、ナザール・モクリンスキー、マシュー・ミューラー、マーティン・ナウマン、アレクサンダー・オマラ、ランドソン・オリベイラ、ギラッド・ペレグ、ジェームズ・ピアス、PJ、センヤ・パガッハ、アディティア・ラガヴァン、クリス・リベルト、アウレリオ・デ・シュルホフ、 、マイクシドロフ、ニックステファン、アーサーストリアー、ティモティホフ、ベントゥーズ、トーマストルトリーニ、シヴァジーバルマ、アーサーフェルシェーブ、リックワルドロン、ビンシン、イムランMユースフ、ヨルンゼフェラー。
すべての変更
以下は、最後の公式リリース(1.11.3および2.1.4)以降の変更点の完全なリストです。
jQueryおよびjQuery Compatリリースの両方に共通
アヤックス
属性
コールバック
コア
CSS
データ
延期
寸法
ドキュメント
効果
イベント
操作(DOM)
オフセット
Selector/Sizzle
Wrap
, : Readme, Build, Test, ...その他
Readmeセクション
Build
- Sizzle 2.0.0 ( bcca4f0 )
- grunt-contrib-jshint ( 1556c46 )
- bower.json lint target ( 285cfbf )
- mailmap ( 3ec73ef )
- ( # 2331 , 8e92e1e )
- bower; npm front-end ( # 15186 , e1949f4 )
- front-end ( 8356948 )
- node dependencies barring jscs ( 8e3a0ce )
- grunt-jscs-checker ( c869a1e )
- requirejs 2.1.17 ( # 2290 , a644101 )
- source map grunt jshint ( 269a27c )
- bower.json: `version` ( 61e21a4 )
- assertions, QUnit ( 8b6aeae )
- commitplease dev ( 39b7606 )
- JSHint ( 34da7d5 )
- authors.txt ( 8f13997 )
- 2.0.0 ( 5bc1ddc )
- QUnit (1.17.1) ( 2d5c5d2 )
- 3.0.0-pre ( 7a607c5 )
- ( fbdbb6f )
- Fix ( dc4b914 )
- Travis ( 31f4f8e )
- define({}) ( # 1768 , 2c1b556 )
- npm ( b92acf7 )
- grunt-bowercopy 1.0.0 ( 323e82c )
- Sizzle ( 8d11310 )
- AMD ( +6051609 )
- ( c5d9d88 )
- version labels in Sizzle versions ( # 1939 , 78ac753 )
- node dependencies ( +9101704 )
- Sizzle ( d6c97ab )
- browser environment; smoke test on Node w/ jsdom ( # 1950 , 76df9e4 )
- ( 66e1b6b )
- ( 0c9d018 )
- npm install ( 35f8e15 )
- Sizzle 1.11.1 ( c0b23e2 )
- Sizzle ( # 2042 , # 1969 , 3a0dd5a )
- grunt-bowercopy ( 712e78c )
- ( 4f776e5 )
- Sanctify the component name status of Wrap ( a4133ff )
- native-promise-only () ( f5aa89a )
- grunt/npm build/dist/test ( bb928bd )
- native-promise-only ( 0065e1f )
- sinon ( # 2160 , 98c25b7 )
サポート
jQuery 3.0
Ajax
CSS
データ
Offset
, : , Readme, Build, Testsその他
«Readme»
- selector-native.js . randsonjs! ( cfe2eae )
Build
jQuery Compat 3.0
Ajax
CSS
データ
Deferred
DOM
Offset
Traversing
サイトおよびリポジトリの組織に関連するセクション:ドキュメント、ビルド、テストBuild
その他
- IE8 (Sinon IE HTML5 Shiv) ( 0b07c65 )