逗号分隔的选择列表?

Dav*_*ave 21 jquery jquery-selectors

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

jQuery("tr","#ctl00_MainContent_MyUserControl").each(function(i,row) { ... }
Run Code Online (Sandbox Code Playgroud)

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

$("#ctl00_MainContent_MyUserControl tr").each(function(i,row) { ... }
Run Code Online (Sandbox Code Playgroud)

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

Ron*_*erg 16

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

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

function(el) {
    $('tr', el).each(...);
}
Run Code Online (Sandbox Code Playgroud)

el您网页上的某些元素在哪里.在这种情况下,您不能使用第二种语法形式.


jen*_*ram 14

jQuery()用两个参数(selectorcontext)调用方法相当于 jQuery(context).find(selector).从而:

jQuery("tr","#ctl00_MainContent_MyUserControl");
Run Code Online (Sandbox Code Playgroud)

等于:

jQuery("#ctl00_MainContent_MyUserControl").find("tr");
Run Code Online (Sandbox Code Playgroud)

这也恰好与以下相同:

jQuery("#ctl00_MainContent_MyUserControl tr");
Run Code Online (Sandbox Code Playgroud)

我个人的看法是,利用context才有意义时,你可以通过已选定的元素(jQueryDOM),没有那么多,当你只是传递一个选择(String).在这种情况下,我只是喜欢模仿CSS选择器:例如,#ctl00_MainContent_MyUserControl tr.

  • @Adamantus 不,`jQuery` 的单字符串输入被视为 CSS 选择器,等于在样式表中限定 `tr, #ctl100... { ... }`。即,_all_ `&lt;tr&gt;` 元素 _and_ ID 为 `ctl1000...` 的元素。说得通? (2认同)