最新のブラウザーでは、jQueryはdocument.querySelectorAll()
、有効なCSSセレクターが使用されている場合にパフォーマンスを向上させるために使用します。document.querySelectorAll()
ブラウザがセレクタまたはメソッドをサポートしていない場合は、Sizzleにフォールバックします。
ただし、カスタムセレクターをデバッグするときは、ネイティブ実装ではなく常にSizzleを使用したいと思います。つまり、 jQueryでサポートされていないCSS3セレクターの1つで:nth-last-child()
あるの実装を考え出そうとしています。このセレクターは最新のブラウザーでネイティブにサポートされているため、リンクされた質問で説明されているように機能します。ただし、カスタムセレクターのデバッグを妨げるのはまさにこの動作なので、避けたいと思います。
私が使用できる安価なハックは、非標準のjQueryセレクター拡張機能をドロップすることです。これにより、いわばセレクターが「無効化」されます。たとえば、すべてli:nth-last-child(2)
が表示されていると仮定すると、これをドロップするだけで次のようになります。
$('li:nth-last-child(2)').css('color', 'red');
これに:
$('li:nth-last-child(2):visible').css('color', 'red');
これにより、常にSizzleによって評価されます。ただし、これには、自分のページ要素を想定する必要がありますが、これは正しい場合とそうでない場合があります。そして、私は本当にそれが好きではありません。言うまでもなく、どうしても必要な場合を除いて、一般的に非標準のセレクターを使用するのは嫌いです。
それをサポートするブラウザーでネイティブメソッドをスキップし、document.querySelectorAll()
jQueryに代わりにSizzleを使用してセレクターを評価させる方法はありますか?非標準のセレクターの使用を使用しないことが望ましいですか?おそらく、これにはの代わりに別のメソッドを呼び出す必要があり$()
ますが、セレクターハックIMOよりもはるかに優れています。