jQuery父母的父母


93

我目前正在尝试查找元素父级的父级。我点击了一个链接,该链接位于<td>,我想获取该<tr>对象。

为什么“ $(this).parent()。parent()”不起作用?会怎样

谢谢,
布伦丹

编辑:看来我的语法中的错误是把整个事情扔掉了。“ $(this).parent()。parent()”实际上可以工作,但是我最后还是考虑了$(this).closest('tr')“,因为这似乎是最有效的解决方案。


1
您能否发布代码,以便我们了解为什么您的父选择器不起作用?
TStamper

Answers:


221

最好的方法可能是使用closest

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

查看文档

Closest的工作方式是先查看当前元素,看其是否与指定的表达式匹配,如果匹配,则返回元素本身。如果不匹配,它将继续逐个父级遍历文档,直到找到与指定表达式匹配的元素。如果找不到匹配的元素,则不会返回任何元素。


20

它应该工作。您也可以尝试$(this).parents(tag),其中tag是要查找的标签。

例如:

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

将找到最接近的tr“上链”。


9

应该可以...您可以尝试

$(this).parents(':eq(1)');

.parents(selector)表示获取与选择器匹配的所有祖先

和:eq(1)表示找到列表中的第一个(零索引,所以第二个)元素


您可以尝试对此发出警报,以确保它是html锚标记。尝试做:alert('anchor html('+ $(this).html()+')');
Lathan

6

过去,该代码段对我来说是有效的:

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

发布一些代码给我们,看看某处是否可能还有另一个问题...


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

5

也尝试

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

2

如果您对父级有任何类型的ID /类,则可以使用parent(),但这将使您所有的父级都达到<body>,除非您进行filter()或以其他方式停止它

$(this).parents('.myClass');

希望这可以帮助某人:)


1

尝试将$(this).parent()包装到类似$($(this).parent())的jQuery对象中,我经常发现需要这样做以确保我有一个有效的jquery对象。从那里,您应该可以控制父母的父母,或者可以使用prev()。


8
这是完全没有意义的。您正在做的是通过创建另一个jQuery对象来浪费时间...
James

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

0

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

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

您可以做父母的父母,这很容易:

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

等等

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.