2011-11-29 2 views
7

DOMをトラバースするものとそうでないものを知る方法はありますか?jqueryセレクタがDOMをトラバースする方法についてのいくつかの質問

$('div p') 

これはdiv要素をすべて返してから、最初のdiv検索で返された各dom要素のP要素をもう一度スキャンするようです。

$('div .foo') 

クラスはDOMをスキャンしていないようです。クラスfooを含む要素の前のリスト$( 'div')のみをフィルタリングします。 $( 'div')の子がクラスfooを持つ場合、それは選択されません。

ダストは含まれません。だから、比較するラムダとリストのラムダのリストを1回だけスキャンしているようです。しかし、これは本当に混乱するようなフィルタを持っているときに:contains( 'x')彼らは自分自身でdomを再帰できるように思える。

これらのセレクタはどのように機能しますか? 'div .foo'は最初にdivだけをトラバースしてから、fooを含むクラスのフィルタを実行するか、何らかの形でtag == Div & & class == fooのときに計算されます。セレクタが複数ある場合はどうですか?それらはページ上に登場した順番で表示されます。私はドームをスキャンしたような気分になります。たぶんそれは並べ替え、返される前に房を削除する?

+2

技術的には、 '$(div .foo)'はすべての '.foo'要素を検索し、THENは' div'をフィルタリングします。 – Blazemonger

+1

独自の結果が得られる限り、https://github.com/jquery/jquery/blob/master/src/traversing.js#L40をご覧ください。 – pimvdb

+3

@ mblase75 NO !! DIV要素のすべてのクラスfooをチェックします! – TeChn4K

答えて

2

jQueryは、最も速いものに基づいてセレクタを最適化します。要素を取得するためのネイティブブラウザでサポートされているメソッド(getElementByIdなど)がある場合は、それを使用します。それ以外の場合は、ネイティブでサポートされているメソッドの結果に基づいてフィルタリングします。

関連する問題