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


89

我有一个这样的表结构:

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

在javascript中,我有一个tbl值为的变量$(table1),然后我想获取of<tbody>的所有直接子元素(tr)table1。我的代码是:

$('tr', tb1)

显然,它返回<tr>表1和表2中的所有元素。我想我可以过

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

或这种逻辑。

我知道$('table1 > tbody > tr')可以得到直接的孩子tr。不幸的是我不能使用它。

有人对此有好主意吗?

谢谢。

Answers:


178

您可以使用find()

tbl.find("> tbody > tr")


2
这是个好主意。$('> tbody> tr',tb1)也对我有用。谢谢。
詹森·李

1
太好了,我不知道您可以在>不指定直接子选择器()的情况下使用直接子选择器()。谢谢。
Silkfire

3
请注意,对于仅向下一级的直接子级,您可以简单地使用“ children([selector])”。
orad 2013年

37
DIRECT CHILDREN =一级子级的孩子,因此api.jquery.com/children是正确的答案,而不是find()-一个得到元素的所有后代的人(通过选择器过滤)...
jave.web

4
您应该将评论作为单独的答案jave.web,因为您的答案是正确的答案。
mrmillsy 2014年


5

这正是为什么要谨慎使用嵌套表的原因。我真的希望您将它们用于数据而非页面布局。

另一个可能会破坏您的一天的问题是在嵌套表上使用CSS选择器...您基本上遇到了同样的问题-您无法选择外部表的TR元素,也不能选择内部表中的元素。(您不能使用子选择器,因为它未在IE6中实现)

这应该工作:

$("#table1 > tbody > tr")

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



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.