在特定级别搜索特定父级

时间:2009-01-15 21:57:30

标签: jquery

如果你有一个递归结构,比如位于父表的td单元格内的子表,那么如何最好地遍历/选择一个特定的父表?例如,如果你想找到下一张桌子或第二张桌子怎么办?

一种方法可能是将这样的东西放在一个循环中:

//Get the next parent up.
$parentTable = $table.parent('td,th')
    .parent('tr')
    .parent('tbody')
    .parent('table');

但这看起来很丑陋而脆弱。

这样的事情看起来很可怕,也可能无法预测:

$parentTable = $table.parents('table').eq(1);  // Get the 2nd parent table up.

已解决

我验证了$ table.parents('table')。eq(N-1)确实给了你第N个父级。至于为什么我使用表格进行格式化,我至少不是这次。 :)我实际上显示递归数据,允许它在客户端折叠。 jQuery让我做了我以前从未考虑过的事情。

而BTW,使用.parent('table')在这种情况下不起作用,因为parent()只会选择直接父级。与child()类似,它仅选择直接子项。 parent()的类似物是find()。 Parents()一路向上,find()一路向下。好东西!

更新

1.3添加了一个新的遍历方法,nearest(),在这里也很有用。最近('table')将向上遍历,直到找到最近的祖先表。

2 个答案:

答案 0 :(得分:2)

这取决于你需要多精确。

$pTable = $table.parent('table'); //get the immediate parent table
$pTable = $table.parent('table.someclass') //get the parent table w/class someclass
$pTable = $table.parents('table').eq(n) //get the #-1 parent table

这正是表格只应用于表格数据而不是布局的原因之一。您应该能够自信地遍历应用程序中的DOM。

答案 1 :(得分:2)

$table.parents('table')

尽可能可预测 - 它会为您提供起始对象和正文之间的父表的反向列表。

如果您无法事先确定嵌套表的结构,则遍历不起作用,您需要根据其他条件选择对象。