如果你有一个递归结构,比如位于父表的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')将向上遍历,直到找到最近的祖先表。
答案 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')
尽可能可预测 - 它会为您提供起始对象和正文之间的父表的反向列表。
如果您无法事先确定嵌套表的结构,则遍历不起作用,您需要根据其他条件选择对象。