родительский элемент jQuery для родителя

93

В настоящее время я пытаюсь найти родителя родительского элемента. У меня щелкнули по ссылке, которая находится в папке <td>, и я хотел бы получить <tr>объект.

Почему не работает "$ (this) .parent (). Parent ()"? Что будет?

Спасибо,
Брендан

Изменить: похоже, ошибка в моем синтаксисе отбрасывала все это. "$ (this) .parent (). parent ()" действительно работает, но я остановился на $ (this) .closest ('tr') ", потому что это кажется наиболее эффективным решением.

красное молоко
источник
1
не могли бы вы опубликовать код, чтобы мы могли понять, почему ваш родительский селектор не работает?
TStamper

Ответы:

221

Лучшим способом, вероятно, было бы использовать closest:

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

Ознакомьтесь с документацией :

Closest работает, сначала просматривая текущий элемент, чтобы увидеть, соответствует ли он указанному выражению, если да, он просто возвращает сам элемент. Если он не совпадает, он будет продолжать перемещаться по документу, родительский за родительским, пока не будет найден элемент, соответствующий указанному выражению. Если соответствующий элемент не найден, он не будет возвращен.

Паоло Бергантино
источник
20

Он должен работать. Вы также можете попробовать $ (this) .parents (tag), где tag - это тег, который вы хотите найти.

Например:

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

Найдет ближайший tr "вверх по цепочке".

Филипп Лейберт
источник
9

Это должно сработать ... вы можете попробовать

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

.Parents (селектор) говорит, что получить всех предков, которые соответствуют селектору

а: eq (1) говорит найти один (с нулевым индексом, поэтому второй) элемент в списке

Латан
источник
Вы можете попробовать предупредить об этом, чтобы убедиться, что это тег привязки html. Попробуйте сделать: alert ('anchor html (' + $ (this) .html () + ')');
Lathan
6

Этот фрагмент уже работал для меня в прошлом:

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

Отправьте нам код, чтобы узнать, не может быть где-то еще проблема ...

Габриэль Херли
источник
Я согласен с этим. Я могу использовать $(this).parent().parent()без проблем
DrewT
5

также попробуйте

$(this).closest('div.classname').hide();
Дилип
источник
2

Если у вас есть какой-либо идентификатор / класс для родителя, вы можете использовать parent (), но это даст вам всех родителей до <body>, если вы не filter () или не остановите его каким-либо другим способом, например

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

Надеюсь, это кому-то поможет :)

абхилашв
источник
1

Попробуйте обернуть $ (this) .parent () в объект jQuery, например $ ($ (this) .parent ()). Я часто нахожу необходимость сделать это, чтобы убедиться, что у меня есть действующий объект jquery. Оттуда вы сможете связаться с родителем-родителем или, возможно, с помощью prev ().

Кристиан Ниссен
источник
8
Это совершенно бессмысленно. Все, что вы делаете, это тратите время на создание еще одного объекта jQuery ...
Джеймс,
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();

и т.п.

Webapper
источник