родительский элемент 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


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();

и т.п.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.