如何通过jQuery函数仅获取直接子元素

Posted

技术标签:

【中文标题】如何通过jQuery函数仅获取直接子元素【英文标题】:How to get only direct child elements by jQuery function 【发布时间】:2011-04-10 21:35:57 【问题描述】:

我有一个这样的表结构:

<table1>
  <tbody>
    <tr>
      <td></td>
        ...
      <td>
        <table2>
          <tbody>
            <tr>
              <td></td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
   </tbody>
  </table>

javascript中,我有一个变量tbl,其值为$(table1),然后我想获取&lt;tbody&gt;table1 的所有直接子元素(tr)。 我的代码是:

$('tr', tb1)

显然它会返回 table1 和 table2 中的所有 &lt;tr&gt; 元素。 我觉得我能过

$('tr', tb1).not(function()return $(this).parent().parent()[0] != tb1;)

还是这样的逻辑。

我知道$('table1 &gt; tbody &gt; tr') 可以得到直子tr。可惜我不能用这个。

有人对此有好的想法吗?

谢谢。

【问题讨论】:

【参考方案1】:

你可以使用find():

tbl.find("&gt; tbody &gt; tr")

【讨论】:

这是一个绝妙的主意。 $('> tbody > tr', tb1) 也适用于我。谢谢。 这太棒了,我不知道您可以使用直接子选择器 (&gt;) 而无需在其前面指定任何内容。谢谢。 请注意,对于仅向下一级的直接子级,您可以简单地使用 'children([selector])'。 DIRECT CHILDREN = 下一级的孩子,因此 api.jquery.com/children 是正确的答案,而不是 find() - 得到所有后代元素(由选择器过滤)... 您应该将您的评论作为单独的答案 jave.web,因为您的答案是正确的。【参考方案2】:

正如 cmets 中提到的 @jave.web

要搜索元素的直接子元素,请使用.children()。它只会搜索直接子代,不会更深入地遍历。 http://api.jquery.com/children/

【讨论】:

【参考方案3】:

这正是人们应该小心嵌套表格的原因。我真的希望您将它们用于数据而不是页面布局。

另一个可能会毁掉你一天的问题是在嵌套表上使用 CSS 选择器......你基本上有同样的问题 - 你无法选择外部表的 TR 元素而不选择内部表中的那些元素。 (您不能使用子选择器,因为它没有在 IE6 中实现)

这应该可行:

$("#table1 > tbody > tr")

但是,我建议您对 TBODY 元素进行硬编码,因为您不应依赖浏览器为您创建它。

【讨论】:

【参考方案4】:

http://api.jquery.com/child-selector/

$('tb1 > tr')

【讨论】:

这只有在tb1是一个html标签时才有效,但它不是;如果tr 是它的直接子代(不是,它是&lt;tbody&gt; 的直接子代)。【参考方案5】:

如果你有两个元素的 id 并且你想找到直接元素使用下面的代码

$("#parent > #two")

如果您想要嵌套搜索,您可以使用 find。 这里有详细解释。 https://handyopinion.com/jquery-selector-find-nested-child-elements/

【讨论】:

以上是关于如何通过jQuery函数仅获取直接子元素的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何获取父元素的子元素

如何获取 javascript/jQuery 中最高子元素的高度?

DOM中如何获取一个元素的子元素?

jquery如何删除子元素

jquery如何获取第一个或最后一个子元素

div子元素无法调整