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 は現在この方法を使用しません。]