1

私は「Javascript the Definitive ガイド」を読み終えたところですが、jquery のようなものの主な理由は、さまざまなブラウザーでの Javascript/DOM インターフェースの極端な不一致によるものであることに気付きました。ほぼすべてのページで、(たとえば) バージョン 8 より前の IE (または Firefox など) を除くすべてのブラウザーで動作するという条件付きで、何らかのドキュメント プロパティについて言及されています。

それで、Javascript DOMをChromeなどで機能するのとまったく同じように実装するだけで、すべてのブラウザで使用できるJSライブラリはありますか。そうでない場合は、DOM を学習しても意味がないように思われます。

4

1 に答える 1

3

すべての DOM を同じように動作させるようなライブラリは存在しません。その理由の 1 つは、他のライブラリが行っている可能性があることと競合しない、信頼できる方法で DOM にパッチを適用するのが容易ではないことです。そして、その理由の 1 つは、いくつかのものは元の形式で変更できることです。たとえば、(関数呼び出しなしで) 直接アクセスできるオブジェクト属性が一部のブラウザーで間違った値を持つことがある場合、それを修正するためにパッチを当てる簡単な方法はありません。また、その理由の 1 つとして、多くのプロジェクトには多くのソースからのコード ブロックがあり、その中には DOM を直接使用するものもあれば、ライブラリを使用するものもあります。ライブラリが DOM の動作を変更すると、DOM を直接使用し、ネイティブ ブラウザで動作するように動作することを期待するコードが壊れる可能性があります。

すべてのコードは、DOM が動作するはずの方法でコーディングし、DOM を修正するこの魔法の shim レイヤーを使用する必要があると主張できますが、それは現実的な議論であり、勝つことはできません。IE6 DOM が IE6 で動作する壊れた方法で動作することを期待するコードが多すぎます。たとえば、jQuery 自体は、IE6 DOM が壊れていることを想定しています。この魔法の DOM フィクサー shim を使用する場合、jQuery コードとは完全に互換性がありません。

その代わりに、ライブラリは、オブジェクトにアクセスする並列の方法で DOM をシャドーイングする方が優れていて簡単であることに気付きました。パッチとブラウザーの修正は、この並列レイヤーに入れられます。次に、ブラウザが動作するように DOM が動作することを期待する既存のコードは影響を受けませんが、ライブラリを使用するために記述されたコードは、ライブラリが期待する方法で動作します。どちらの目標も達成できます。はい、これは学ぶべき「新しい」API ですが、実際にはそれほど違いはありません。DOM API を知っている場合、jQuery の多くは、共通の jQuery 形式で表現された直接的な類似物です。

たとえば、jQuery では、DOM プロパティ名を使用し.attr("propName")て、DOM オブジェクトの任意の属性にアクセスできます。propNameDOM のプロパティ名を学べば、jQuery でそれらすべてにアクセスする方法がわかります。同様に、ページ内の任意のオブジェクトのセットを で選択できますjQuery(CSS3selector)。したがって、CSS3 セレクターを知っていれば、jQuery で任意のオブジェクトのセットを選択する方法を知っていることになります。はい、jQuery には、DOM には存在しない新しい機能を追加する拡張機能が多数ありますが、必要に応じてそれらを個別に学習できます。とにかく、それらは通常のDOMにはありません。

shim最後に、不足している機能を追加するライブラリがいくつかあります。たとえば、ES5 メソッドを標準の JavaScript オブジェクト ( Array.indexOf(). これらの shim ライブラリは、あなたが話しているように部分的に機能します。メソッドが存在しない場合は、標準の実装と同じように機能するように追加します。彼らは壊れた実装を修正しようとはしませんが、開発者がブラウザーの互換性を気にせずに ES5 にコーディングできるように、ブラウザーのバージョンが古いために不足しているものを追加します。これは、すべてのブラウザーで DOM 全体を修正するよりもはるかに限定的な目標であり、一般的に成功しています。

于 2012-07-17T21:10:10.947 に答える