JQuery родительский родитель - PullRequest
93 голосов
/ 08 июня 2009

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

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

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

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

Ответы [ 9 ]

219 голосов
/ 08 июня 2009

Лучше всего было бы использовать closest:

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

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

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

20 голосов
/ 08 июня 2009

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

Например:

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

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

9 голосов
/ 08 июня 2009

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

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

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

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

6 голосов
/ 08 июня 2009

Этот фрагмент выполнялся для меня в прошлом:

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

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

5 голосов
/ 19 мая 2010

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

$(this).closest('div.classname').hide();
2 голосов
/ 21 марта 2013

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

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

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

1 голос
/ 14 июня 2010
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}
1 голос
/ 08 июня 2009

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

0 голосов
/ 28 января 2013

.closest() не всегда лучший вариант, особенно если у вас одинаковая конструкция элемента.

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

Вы можете сделать родителя родителя, и это очень просто:

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

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...