如何在jQuery中获取元素的第n级父元素?

159
当我想获取元素的第三级父级时,我必须编写 $('#element').parent().parent().parent()。 是否有更优化的方法?

2
我想通过数字(级别)获取元素,因为我的元素可能没有任何类ID或名称。 - Artur Keyan
1
如果您计划重复使用此功能,则最佳解决方案是制作一个jQuery插件。 - zzzzBov
3
请参考http://jsperf.com/jquery-get-3rd-level-parent 进行性能比较。 - a'r
1
另一个好用的工具是“.closest()”函数。$('li.item').closest('div')将会给你最接近li.item祖先的DIV。当你不知道元素在上面多少级,但你知道它的标签名/类名/其他某些属性时,这个函数非常有用。 - Graham
13个回答

1

使用 eq 似乎可以获取动态 DOM,而使用 .parent().parent() 则似乎可以获取最初加载的 DOM(如果这是可能的话)。

我在一个元素上同时使用它们,该元素在 onmouseover 时应用了类。eq 显示类,而 .parent().parent() 不显示。


1

由于parents()返回一个列表,因此这也适用。

$('#element').parents()[3];

0
你可以使用类似这样的代码:
(function($) {
    $.fn.parentNth = function(n) {
        var el = $(this);
        for(var i = 0; i < n; i++)
            el = el.parent();

        return el;
    };
})(jQuery);

alert($("#foo").parentNth(2).attr("id"));

http://jsfiddle.net/Xeon06/AsNUu/


1
不是下投票者,但这可能是这里最糟糕的解决方案(即低效)。 - zatatatata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接