在jquery中更有效地执行parent().parent().parent()等操作

在jquery中更有效地执行parent().parent().parent()等操作,jquery,Jquery,在我正在编写的这个脚本中,我发现自己连续七次使用.parent()来获取元素。虽然这是可行的,但似乎可以/应该有一种更简单的方法来完成这个/我不知道的功能。除了关于更多元素的更具体的类/ID之外,还有其他想法吗 基本上,我的问题归结为当我在下面的html中引用id为“innerSpan”的span时,访问id为outer的div: <div id='outer'> <a href="some_url"> <span id="inner">

在我正在编写的这个脚本中,我发现自己连续七次使用.parent()来获取元素。虽然这是可行的,但似乎可以/应该有一种更简单的方法来完成这个/我不知道的功能。除了关于更多元素的更具体的类/ID之外,还有其他想法吗

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

<div id='outer'>
    <a href="some_url">
        <span id="inner">bla bla</span>
    </a>
</div>
还有我的剧本。我编写了一个函数,需要向它传递主行tbody的id以及辅助表id,以便动态添加更多行。对于这个问题,你并不需要这个函数,但基本上我得到的ID是这样的:

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

jsFiddle:


单击添加另一个以触发事件(我想这就是您要查找的:)

您有两个嵌套表,
要获得所需的内容,可以使用这两种DOM遍历方法
.closest()
.parents()

  • 自我或祖先。Self或沿DOM树向上移动,直到找到所提供选择器的匹配项
  • 沿着DOM树向上移动到文档的根元素,将每个祖先元素添加到临时集合中;然后,如果提供了选择器,它将根据选择器筛选该集合
使用嵌套表:

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

如果您知道该元素的
CSS类名
,则可以调用
最近()方法

var thatParent=  $("#someId").closest(".somCSSClassName")
因此,您的代码可以重写为

get_suboption_row($(this).closest("someClass").attr('id'),
                $(this).closest("someOtherClass").attr('id'));
编辑:在看到您的JSFIDLE之后

使用类名获取父表

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

工作示例:

它将是
$(this).closest(“#someId”)
。但是,如果它是一个id,最好只使用
$(“#someId”)
,因为id必须是唯一的。@KevinB:这只是一个使用最接近的通用示例。因此,他可以用于任何jquery选择。我尝试从嵌入的表中执行.nestest('tbody').nestest('tbody').attr('id'),但返回的是未定义的。你不能用它两次吗?@JohnB:取决于你的标记。你能把它发布到JSFIDLE上吗?我实际上需要tbody的id,因为我使用的是多个具有不同id的tbody。或者,我可以使用您的代码,只在末尾添加一个find('tbody')。我尝试从嵌入的表中执行.closest('tbody')。closest('tbody')。attr('id'),但返回的是未定义的。你不能用两次吗?@JohnB你不需要用两次。使用正确的选择器只需一次。我迟到了(我没有刷新页面),如果答案完全重复,我应该删除吗?你能给我一个例子,说明如何使用嵌入表中的任何一个标记在外部tbody(应该是1)上获取id吗?顶部添加了JSFIDLE。第一个警报给了我想要的。第二,我想做同样的事情。嗯,我不知道HTML5的ID。我怎么知道我正在运行哪个版本的html!DOCTYPE?hmmm不确定Jquery,但在香草中可以像el.parentNode.parentNode那样执行
get_suboption_row($(this).closest("someClass").attr('id'),
                $(this).closest("someOtherClass").attr('id'));
 alert($(this).closest('tbody').closest('.table-bordered').attr('id'));