DOMトラバーサルにjQueryを使用すると、これらは両方とも同じ結果を返します(私は信じています):
$("whatever").find(".foo .bar")
$("whatever").children(".foo").children(".bar")
どちらを使用するのが好ましいですか?
DOMトラバーサルにjQueryを使用すると、これらは両方とも同じ結果を返します(私は信じています):
$("whatever").find(".foo .bar")
$("whatever").children(".foo").children(".bar")
どちらを使用するのが好ましいですか?
以下で説明するように、それらは同等ではありませんが、一致するように調整し、.children()
速度や.find()
簡潔さ (Sizzle 内での余分な作業、手始めにこれを解析する作業) を行う場合は、どちらがより重要かを判断します。
最初の結果は異なりますが、子供であることがわかっている場合は、次のようにすることができます。
$("whatever").find("> .foo > .bar")
//equal to...
$("whatever").children(".foo").children(".bar")
これは、2 番目の関数と同等です。現在、あなたが持っている最初のものはこれを見つけるでしょう:
<whatever>
<div class="foo">
<span>
<b class="bar">Found me!</b>
</span>
</div>
</whatever>
2 番目はそうではなく、.foo
が の直接の子でwhatever
あり.bar
、その直接の子である必要があり.find(".foo .bar")
ます。.bar
.foo
または:
$('whatever .foo .bar')
(または>.foo>.bar
、直接の子のみが必要な場合。)
標準の CSS3 セレクター (Sizzle 固有の拡張機能を使用していない) である限りwhatever
、上記のような単一のドキュメント相対セレクターが最新のブラウザーに渡されdocument.querySelectorAll
、Sizzle の手動のツリー ウォークよりもはるかに高速になります。
[理論的にelement.querySelectorAll
はフォームのクエリを$(...).find(...)
高速化するために使用できるはずですが、Selectors-API 標準と jQuery の従来のスコープ動作との間で相対セレクターがどのように解決されるかについて意見が異なるため、jQuery は現在この方法を使用しません。]