4

DOMトラバーサルにjQueryを使用すると、これらは両方とも同じ結果を返します(私は信じています):

$("whatever").find(".foo .bar")
$("whatever").children(".foo").children(".bar")

どちらを使用するのが好ましいですか?

4

2 に答える 2

6

以下で説明するように、それらは同等ではありませんが、一致するように調整し、.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

于 2010-05-27T11:15:29.627 に答える
0

または:

$('whatever .foo .bar')

(または>.foo>.bar、直接の子のみが必要な場合。)

標準の CSS3 セレクター (Sizzle 固有の拡張機能を使用していない) である限りwhatever、上記のような単一のドキュメント相対セレクターが最新のブラウザーに渡されdocument.querySelectorAll、Sizzle の手動のツリー ウォークよりもはるかに高速になります。

[理論的にelement.querySelectorAllはフォームのクエリを$(...).find(...)高速化するために使用できるはずですが、Selectors-API 標準と jQuery の従来のスコープ動作との間で相対セレクターがどのように解決されるかについて意見が異なるため、jQuery は現在この方法を使用しません。]

于 2010-05-27T11:29:38.860 に答える