jQuery父元素的父元素

102

我目前正在尝试查找元素的父元素的父元素。我有一个在<td>中被单击的链接,我想获取<tr>对象。

为什么"$(this).parent().parent()"会失效?哪种方法可以解决这个问题?

谢谢,
Brendan

编辑:我的语法出了错误,导致整个代码失灵。实际上"$(this).parent().parent()"是可以工作的,但我最终选择了$(this).closest('tr')",因为它似乎是最有效的解决方案。


1
你能发一下代码吗?这样我们可以看看为什么你的父选择器没起作用。 - TStamper
9个回答

235

最好的方法可能是使用 closest

$(this).closest('tr');

查看文档

closest方法首先检查当前元素是否与指定的表达式匹配,如果是,则直接返回该元素。如果不匹配,则会继续向上遍历文档,逐级检查父元素,直到找到一个匹配指定表达式的元素为止。如果没有找到匹配元素,则不返回任何内容。


20

这应该可以正常工作。你也可以尝试使用 $(this).parents(tag) ,其中 tag 是你想要查找的标签。

例如:

$(this).parents("tr:first")

将查找"向上链"中最靠近的tr元素。


10

那应该可以运行... 你可以尝试一下

$(this).parents(':eq(1)');
.parents(selector) 表示获取与选择器匹配的所有祖先元素, :eq(1) 表示在列表中找到第二个(从0开始计数)元素。

你可以尝试使用alert来确保它是一个HTML锚标签。尝试执行以下操作:alert('anchor html(' + $(this).html() + ')'); - Lathan

8

这段代码以前对我很有用:

$(this).parent().parent(); 

请您发布一些代码,以便我们查看是否存在其他问题...


我同意这个观点。我可以毫无问题地使用 $(this).parent().parent() - DrewT

5

同样也可以尝试

$(this).closest('div.classname').hide();

2
如果父元素有任何类型的id/class,你可以使用parents()方法,但是它会返回所有父元素直到标签,除非你使用filter()或其他方式来停止它的执行。
$(this).parents('.myClass');

希望这对某些人有所帮助 :)

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

1
尝试将$(this).parent()包装成一个jQuery对象,例如$($(this).parent())。我经常发现需要这样做以确保我有一个有效的jQuery对象。从那里,您应该能够获得父级的父级,或者使用prev()方法。

8
这完全没有意义。你所做的只是浪费时间,通过创建另一个 jQuery 对象... - James

0

.closest() 并不总是最好的选择,特别是当您有相同元素结构时。

<div>
    <div>
        <div>
        </div>
    </div>
</div>

你可以获取父级的父级,而且非常容易:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

等等。


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