更有效的方法在jquery中执行parent()。parent()。parent()等

在我写的这个脚本中,我发现自己连续七次使用.parent()来获取元素。 虽然这有效,但似乎可以/应该是一种更简单的方法来实现这个/我不知道的function。 关于更多元素的更具体的类/ ids以外的任何想法?

基本上,当我在下面的html中引用id为’innerSpan’的span时,我的问题归结为访问id为id的div:

  

所以目前,我会做这样的事情:

var outer = $('#inner').parent().parent()

并且深深嵌套的元素会变得疯狂。

另一个例子:

在这里我的HTML:

 

和我的剧本。 我写了一个函数,需要传递主行tbody的id以及辅助表id,这样我就可以动态添加更多行。 你真的不需要这个问题的function,但基本上我得到这样的ID:

 get_suboption_row($(this).parent().parent().parent().parent().parent().parent().parent().attr('id'), $(this).parent().parent().parent().parent().attr('id')); 

谢谢

jsFiddle: http : //jsfiddle.net/Hg4rf/

单击添加另一个以触发事件

你有2个嵌套表,
得到你想要的东西你可以使用这两个DOM遍历方法.closest().parents()

  • .closest()向上移动DOM树,直到找到所提供选择器的匹配项
  • .parents()将DOM树移动到文档的根元素,将每个祖先元素添加到临时集合中; 然后,如果提供了一个选择器,它会根据选择器过滤该集合

使用嵌套表:

 $(this).closest('table').closest('tbody').attr('id'); 

 $(this).parents('table').parents('tbody').attr('id'); 

jsFiddle演示

我认为.closest()就是你要找的:)

如果您知道该元素的CSS Class name ,则可以调用closest()方法

 var thatParent= $("#someId").closest(".somCSSClassName") 

所以你的代码被重写为

 get_suboption_row($(this).closest("someClass").attr('id'), $(this).closest("someOtherClass").attr('id')); 

编辑:看到你的JSfiddle后

使用类名来获取父表。

  alert($(this).closest('tbody').closest('.table-bordered').attr('id')); 

工作样本: http : //jsfiddle.net/Hg4rf/2/

Red Blue Green
None Size
Remove Add Another