jQuery はセレクター レベル 3標準への準拠をホームページで宣伝していますが、仕様を完全には実装していません。独自のセレクターのドキュメントでは、「CSS 1–3 から [借用] し、独自のセレクターを [追加] する」ことを明確にしています。1
jQuery 1.9 以降、レベル 3 標準のほぼすべてのセレクターがSizzle (その基礎となるセレクター ライブラリ) でサポートされていますが、次の例外があります。
次のレベル 3 セレクターは jQuery 1.9 以降で実装されていますが、 jQuery 1.8 以前では実装されていません2 :
さらに:
セレクターが Firefox、Chrome、および IE9 で機能しているように見える理由は、jQuery が最初にセレクター文字列をネイティブdocument.querySelectorAll()
実装に渡してから Sizzle にフォールバックするためです。これは有効な CSS セレクタであるdocument.querySelectorAll()
ため、jQuery が使用するノード リストを正常に返すため、Sizzle を使用する必要がなくなります。
失敗したdocument.querySelectorAll()
場合、jQuery は自動的に Sizzle にフォールバックします。失敗する可能性のあるシナリオはいくつかあります。
あなたの場合、IE9とIE8は実装していますdocument.querySelectorAll()
が、IE8はサポートしていません:nth-last-child()
。jQuery/Sizzle:nth-last-child()
もどちらも実装していないため、使用するフォールバック動作がなく、IE8 では完全に失敗します。
少なくとも jQuery を 1.9 (下位互換性のあるリリース ブランチ) に更新できない場合は、いつでもカスタム セレクター拡張機能を使用して、欠落している疑似クラスを自分で実装できます。ただし、jQuery 1.9 では、古い IE バージョンとの互換性を維持しながら、上記のセレクターのサポートが追加されているため、互換性が必要な場合は、最低限そのバージョンに更新することをお勧めします。
1は、後で削除される前に 仕様のこの古い CR リビジョンで最後に定義された をサポートし、標準から拡張しています。jQuery の実装と現在の標準の違いは、この質問で説明されています。:contains()
:not()
2 他のいくつかのセレクター (+
および~
兄弟コンビネーター:empty
、:lang()
および一部の CSS2 属性セレクターなど) も、jQuery の初期の開発中に削除される予定でした。いくつかの追加テストが利用可能になった後、それらのほとんどすべてが最終リリースになりました。:lang()
上で述べたように、1.9 より前にリリースされなかったのは 1 つだけでした。