2013-04-30 14 views
8

jqueryでは、DOM内の順序付けられていないリスト内でリスト項目を見つける2つの方法があるようです。cssセレクタとjquery traversal

$("ul>li"); 

$("ul").find("li"); 

は、後者がより好ましいかもしれない理由はありますか?同じ結果を得るにはより多くのコードが必要になるようです。

+1

'find'が一致するすべての子孫要素を選択し、'>は '直接の子セレクタです。これは、あなたがjQueryのドキュメントを読んでいないことを示しています。 – undefined

+0

あなたは間違っています。 '$(" ul> li ")'は、 '' ul'の最初の '' li''を見つけます。 '$(" ul ")。find(" li ")' 。最初の場合、 '$(" ul li ")'の意味ですか? – WooCaSh

+0

*それに依存します。ほとんどの場合、パフォーマンスに基づいて使用するバージョンを決定しようとすると、成熟前の最適化が行われるため、ほとんどの場合、どのメンバを使用するかを気にするのではなく、メンテナンスしやすく、読みやすい/もっと早く。 –

答えて

11

速度。 .find()が毎回勝つでしょう。そして処理のスピードは同じです!

jsPerf speed test to show what I mean

.find()は下位(子供、子供たちの子供たち、子供たちの子供たちの子供たち、など)で、>は、直接の子セレクタですべてを取得しますが。その優れたリンゴ・ツー・リンゴ、次のいずれかを比較する:あなたが.find('li')をすれば、それはまだへの最速の方法になるだろうが、$('ul').children('li')

$('ul').find('li')

  • $('ul > li')

  • 0

    1)彼らは同じじゃない、2番目の形式は$("ul li");に相当しますと、最初のものが$("ul").children("li")

    2)あなたは二番目の形式を使用している場合、あなたはjQueryの構文解析タスクを簡素化することと等価です。しかし、あなたのコードは単純ではありませんので、スピードがあなたのケースでは非常に適切であることが証明されていない限り、私はそれをお勧めしません。これは、通常、たとえば要素キャッシュやその他のトラバース関数などのコードが多く、findの使用を正当化していると言われています。