逗号分隔的选择列表?

时间:2011-11-11 10:13:12

标签: jquery jquery-selectors

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

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

看起来它正在从页面上的用户控件中选择<tr>(忽略实例完全命名的事实!)但它不是我熟悉的语法,也找不到任何东西在文档中。我希望它写成:

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

有谁可以告诉我,如果我在这里缺少(微妙或其他)差异?

4 个答案:

答案 0 :(得分:16)

This selector选择ID为tr的元素内的所有ctl00_MainContent_MyUserControl元素。它与你的第二个例子完全相同。

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

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

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

答案 1 :(得分:14)

使用两个参数(selectorcontextjQuery() jQuery(context).find(selector)调用is equivalent to方法。因此:

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

等于:

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

也恰好与以下相同:

jQuery("#ctl00_MainContent_MyUserControl tr");

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

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:2)

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

来自API文档

  

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

请参阅http://api.jquery.com/jQuery/