2010-09-10 36 views
59

我有一个表的结构是这样的:如何获得通过jQuery函数只有直接子元素

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

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

$('tr', tb1) 

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

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

或这种逻辑。

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

任何人都有这个好主意?

谢谢。

回答

136

您可以使用find()

tbl.find("> tbody > tr")

+1

这是一个勇敢的想法。 $('> tbody> tr',tb1)也适用于我。谢谢。 – 2010-09-10 19:40:58

+0

这真是太好了,我不知道你可以使用直接子选择器('>')而不需要在它前面指定任何东西。谢谢。 – silkfire 2013-10-24 07:39:03

+2

请注意,对于只有一个级别的直接孩子,您可以简单地使用'children([selector])'。 – orad 2013-10-31 18:57:53

4

这就是为什么我们应该小心与嵌套表的原因。我真的希望你使用他们的数据而不是页面布局。

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

这应该工作:

$("#table1 > tbody > tr") 

不过,我建议你硬编码TBODY元素,因为你不应该依赖于浏览器为你创造它。

10

正如评论

提到要通过搜索元素的直接孩子使用.children() @ jave.web。它只会搜索直接的孩子,而不是更深入地遍历。 http://api.jquery.com/children/