foo
ページに特定のクラスを持つ要素がたくさんあるとしましょう。これらの要素はすべて、 element 内にあることが保証されていますancestor
。
これらのクエリのどれが高速になりますか:
$match = $(ancestor).find('.foo')
対$match = $('.foo')
一般的なクエリの場合、最初の選択肢の方が高速であることはわかっていますが、純粋にクラスに基づいてクエリを実行している場合でも、それは維持されますか?
私の混乱の一部は、最初のタイプを (少なくとも一般的なクエリに対して) 推奨している人々のアカウントを読んだことにも起因していますが、最近、ブラウザーのネイティブ実装の
ancestor.querySelectorAll('.foo')
よりも高速ではありませんdocument.querySelectorAll('.foo')
- その理由は明らかに、前者が後者を呼び出してから、属していない要素を除外することによって実装されているためancestor
です。
編集
誰かが指摘したように、私はこれを自分でテストできます。私はそうするつもりです。ただし、選択を使用してスコープを設定することでメリットが得られる理由を誰かが説明できれば幸いです (繰り返しますが、一致するすべての要素が既知の祖先内にあると想定しているため、スコープ設定によって結果が変更されることはありません)。jQuery
querySelectorAll