【问题标题】:Comma separated list of selectors?逗号分隔的选择器列表?
【发布时间】:2011-11-11 10:13:11
【问题描述】:

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

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

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

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

谁能告诉我这里是否有差异(微妙或其他)??

【问题讨论】:

  • 当上下文被缓存并且您想对其进行快速查询时,第一种语法很有用。但是,正如其中一个答案所述,它与 $( '#...' ).find( 'tr' ) 相同。如果缓存不重要,为了便于阅读,推荐使用第二种语法。请记住,当您缓存某些内容时,它会占用内存,因此有时开销并不值得。
  • related stackoverflow.com/q/16422478/125981 TO ME,鉴于链接问题中关于嘶嘶引擎如何在内部处理特别是在大型 DOM 上的推理,不建议使用第二种形式/格式

标签: jquery jquery-selectors


【解决方案1】:

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

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

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

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

【讨论】:

  • 这和使用$(el).find('tr')一样吗?如果是这样,有什么想法更高效吗?
【解决方案2】:

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

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

等于:

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

这也恰好与以下内容相同:

jQuery("#ctl00_MainContent_MyUserControl tr");

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

【讨论】:

  • jQuery("tr, #ctl00_MainContent_MyUserControl"); - 这是一样的吗? (无引号)
  • @Adamantus 不,jQuery 的单字符串输入被视为 CSS 选择器,等于在样式表中限定 tr, #ctl100… { … }。即,所有 <tr>元素 ID为ctl1000…的元素。有意义吗?
  • 只是为了清楚“这也恰好是相同的”在 jQuery 内部使用 jQuery("#ctl00_MainContent_MyUserControl tr"); 并不完全正确,它在整个文档中选择 ALL tr,然后选择其中的那些id 因此jQuery("#ctl00_MainContent_MyUserControl").find('tr') 效率更高,ID 选择器非常快。在非常大的 DOM 和/或旧版浏览器中尤其如此
  • 更多关于上下文的注释来自不同的人stackoverflow.com/q/16422478/125981
【解决方案3】:

完全一样。也可以这样写:

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

前者的语法见jQuery constructor documentation。它基本上是“查找与第一个选择器匹配的所有元素,即第二个匹配的第二个选择器的后代”。

【讨论】:

    【解决方案4】:

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

    来自 API 文档

    上下文用作上下文的 DOM 元素、文档或 jQuery

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2018-03-09
      • 2013-08-01
      • 1970-01-01
      • 2016-12-28
      相关资源
      最近更新 更多