逗号分隔的选择列表?

我现在正在重构一些代码,并遇到了一个选择器:

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

看起来它正在从页面上的用户控件中选择

(忽略实例完全命名的事实!)但它不是我熟悉的语法,在文档中找不到任何内容。 我希望它写成:

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

任何人都可以告诉我,如果我在这里缺少(微妙或其他)差异吗?

此选择器选择id为ctl00_MainContent_MyUserControl元素内的所有tr元素。 它与您的第二个示例完全相同。

第二个参数提供第一个参数的上下文。 此语法有更好的用例,例如:

 function(el) { $('tr', el).each(...); } 

el是您网页上的某些元素。 在这种情况下,您不能使用第二种语法forms。

使用两个参数( selectorcontext )调用jQuery()方法等同于 jQuery(context).find(selector) 。 从而:

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

等于:

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

这也恰好与以下相同:

 jQuery("#ctl00_MainContent_MyUserControl tr"); 

我个人的观点是, 当你可以传递已经选择的元素jQueryDOM时, context的使用才有意义 ,而不是只传递一个选择器( String )。 在这种情况下,我只是喜欢模仿CSS选择器:例如, #ctl00_MainContent_MyUserControl tr

它完全一样。 它也可以写成:

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

前者的语法可以在jQuery构造函数文档中看到。 它基本上是“找到与第一个选择器匹配的所有元素,这是第二个匹配的第二个的后代”。

jQuery构造函数的第二个参数(当第一个是选择器时)是上下文

来自API文档

context用作上下文的DOM元素,Document或jQuery

见http://api.jquery.com/jQuery/