2011-11-11 26 views
18

私は、現時点ではいくつかのコードをリファクタリングすることだし、セレクタに遭遇していますコンマで区切られたセレクタのリスト?

jQuery("tr","#ctl00_MainContent_MyUserControl").each(function(i,row) { ... } 

それがページ上でユーザーコントロールから<tr>年代を選択しているように見えます(インスタンスは完全に命名されているという事実を無視!)しかし、それは私がよく知っている構文ではなく、ドキュメントで何も見つけることができません。私はそれが書かれることを期待したい:私はここに欠けている(微妙かそうでない)違いがあるかどう

$("#ctl00_MainContent_MyUserControl tr").each(function(i,row) { ... } 

誰も私を伝えることはできますか?

+0

最初の構文は、コンテキストがキャッシュされていて、クイッククエリを実行したい場合に便利です。しかし、答えの1つに言及されているように、$( '#...').find( 'tr')は真です。キャッシングが重要でない場合は、読みやすくするために2番目の構文を使用することをお勧めします。何かをキャッシュするときにはメモリを消費するので、オーバーヘッドがそれに値するものではないことを覚えておいてください。 – AlexStack

答えて

16

This selectorは、ctl00_MainContent_MyUserControlの要素内のすべてのtr要素を選択します。あなたの2番目の例とまったく同じです。

第2パラメータは、最初のパラメータのコンテキストを提供します。この構文のためのより良いユースケースは、たとえば、あります

elがあなたのページにいくつかの要素である
function(el) { 
    $('tr', el).each(...); 
} 

。この場合、2番目の構文形式は使用できません。

+0

これは '$(el).find( 'tr')'と同じですか?もしそうなら、どんなアイデアがより効果的か? – ksav

2

jQueryコンストラクタの第2引数(最初がセレクタの場合)は、というコンテキストです。コンテキストとして使用するためのAPIドキュメント

コンテキスト A DOM要素、ドキュメント、またはjQueryのから

は、それはまったく同じだhttp://api.jquery.com/jQuery/

3

を参照してください。また、書かれている可能性:

$("#ctl00_MainContent_MyUserControl").find("tr").each(function(i,row) { ... } 

元の構文はjQuery constructor documentationで見ることができます。基本的には、最初のセレクタと一致するすべての要素を見つけます。これは、2番目のセレクタの子孫です。

12

二つの引数(selectorcontextis equivalent tojQuery(context).find(selector)jQuery()メソッドを呼び出します。このように:も同じであることを起こる

jQuery("#ctl00_MainContent_MyUserControl").find("tr"); 

jQuery("tr","#ctl00_MainContent_MyUserControl"); 

はに等しい

jQuery("#ctl00_MainContent_MyUserControl tr"); 

私の個人的な意見ですそのcontextの使用のみ既に選択された要素を渡すことができたら意味がありますjQueryまたはDOM)、セレクタ(String)を渡すだけではありません。その場合、CSSセレクタを模倣するほうが簡単です(例:#ctl00_MainContent_MyUserControl tr)。

関連する問題